Я новичок в написании пакетных сценариев, и наша система только что подбросила меня.

Мы получаем новые компьютеры с Windows 10 и Office 16. У нас также есть компьютеры с Windows 7 и Office 14 - это сеть, которая еще не была обновлена.

В настоящее время у меня есть командный файл, который выполняет xcopy при выполнении, который проверяет файл Excel на сервере по версии того же файла на локальном компьютере пользователя. Если версия сервера более новая, она копирует локальную версию, а затем открывает и запускает файл Excel.

Мне нужно обновить мой пакет, чтобы он соответствовал обеим версиям Excel, когда ему нужно открыть и запустить файл.

Я могу проверить либо версию Windows, либо версию Excel, поскольку они женаты вместе, но я открыт для более надежного метода.

Я играл с WMIC, который надежно возвращает версию окон на наших машинах. Я пробовал другие скрипты из своего исследования в сети, и они не работали так, как мне хотелось бы.

Вот мой текущий код:

set "source=\\s001\FOLDER\EXCELFILE TOOL.xlsm"
set "target=C:\Apps\EXCELFILE TOOL PROGRAM\"

xcopy "%source%" "%target%" /y /d /h /k /r

START "" "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.exe" /e "%target%\EXCELFILE TOOL.xlsm"
EXIT

Перед строкой «ПУСК» мне нужно проверить, какая версия Windows или офиса установлена ​​на машине, а затем изменить начало так, чтобы оно было одним из этих двух вариантов:

Опция 1

START "" "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.exe" /e "%target%\EXCELFILE TOOL.xlsm"

Вариант 2

START "" "C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.exe" /e "%target%\EXCELFILE TOOL.xlsm"

Любая помощь будет очень признательна, спасибо!

-2
Graham Dredt 11 Сен 2018 в 16:07

1 ответ

Лучший ответ

Если вы просто хотите запустить Excel, в поиске по каталогам нет необходимости.

После установки Excel будет иметь подраздел реестра, созданный в:

"[HKEY_LOCAL_MACHINE|HKEY_CURRENT_USER]\Software\Microsoft\Windows\CurrentVersion\App Paths"

Скорее всего, названы:

"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\Excel.exe"

Где данные значения Default содержат полный путь к приложению.

С записями под этим ключом, просто введите имя приложения, чтобы запустить его:

Start Excel.exe

Запись данных REG_SZ может использоваться с расширением .exe или без него.
(При необходимости функция ShellExecuteEx добавляет расширение при поиске в подразделе Пути приложений) .

Поэтому вы можете просто использовать:

Start Excel

Если вы используете метод, предложенный в большинстве комментариев, вам нужно будет использовать Excel.exe как часть маски поиска!

В приведенном ниже примере используется дополнительный цикл For, позволяющий проверять как Program Files, так и Program Files (x86)

@For %%A In ("%ProgramFiles%" "%ProgramFiles(x86)%" 2^>Nul
) Do @For /F "Delims=" %%B In ('Where /R %%A Excel.exe 2^>Nul'
) Do @Start "" "%%~B"

Конечно, вы можете игнорировать внешний цикл, если уверены, что установленная версия всегда устанавливается в Program Files (x86).

@For /F "Delims=" %%A In ('Where /R "%ProgramFiles(x86)%" Excel.exe 2^>Nul'
) Do @Start "" "%%~A"

Два приведенных выше примера можно оставить как одну строку, если вы не заинтересованы в поддержании строк, содержащих не более 80 символов.

1
Compo 11 Сен 2018 в 17:43