如何编写批处理脚本以执行基于Windows版本的操作

时间:2018-09-11 13:07:28

标签: excel batch-file

我刚开始编写批处理脚本,我们的系统刚刚给我抛出了一个曲线球。

我们正在获得配备Windows 10和Office 16的新计算机。我们还拥有Windows 7和Office 14 PC,它们是尚未升级的网络。

我目前有一个批处理文件,该文件在执行时会执行xcopy,以对照用户本地计算机上同一文件的版本来检查服务器上的excel文件。如果服务器版本较新,它将复制本地版本,然后打开并运行excel文件。

当需要打开并运行文件时,我需要更新批处理以适应两个版本的excel。

当它们结合在一起时,我可以在Windows或excel版本上进行检查,但是我愿意采用哪种方法更可靠。

我正在与WMIC一起玩,它可以可靠地返回我们计算机上的Windows版本。我从网上研究中尝试了其他脚本,但这些脚本无法正常运行。

这是我当前的代码:

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

在“ START”行之前,我需要检查计算机上的Windows或Office版本,然后将start修改为以下两个选项之一:

选项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"

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分: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 FilesProgram 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个字符的行,则上述两个示例可以保留为一行。