晚上好
我一直在寻找几个小时寻找一种方法来testing一个batch file在本地,将需要在几个版本的Windows上运行(NT,2000,XP,7,10)
我一直在寻找CMD.exe版本从每一个无济于事。 我在错误的地方看吗? 或者这不是前进的方向
谢谢
在一个侧面说明,我发现有趣的Windows 10 CMD持有%OS%variables为Windows_NT …奇怪,假设一个旧function被遗忘了?
使用版本是相当无关的。 运行时您会注意到
echo %cmdextversion%
它永远是2
。 大部分命令在所有版本的cmd.exe上都是一样的,除非你要回到command.com
的日子
操作系统的改变有点不同,但是有一条细线,你可以安全地使用批处理文件中的任何命令。
例如,您不应该回到执行cd C:\Progra~1
的日子,而只是将包含路径的空格cd C:\Progra~1
引号。
但是,真正解决您的问题的方法是在您的命令文件中执行操作系统检查,然后goto
每个操作系统。
大多数基于MS-Dos
的命令仍然几乎相同,只是在新系统上排除了较新的命令,但是再次,可以在执行batch / cmd文件的部分之前通过检查ver
来绕过这些命令。
这里有一个可以在任何Windows操作系统上运行的例子。
for /d %%a in ("F:\Program Files\TrendReports\GRP\Hourly\*") do (xcopy /Y "%%a\%datetime%\*." "C:\Temp-stats")
一些非常旧的NT系统可能不喜欢使用"F:\Program Files"
,而C:\Progra~1
的旧方法在最新的操作系统上仍然是100%。
作为64位窗口的附注, cd C:\Progra~2
将会cd到C:\ program Files(86)`
因此,如果结构正确,您可以在任何Windows操作系统上运行任何批处理文件,并确保通过检查脚本中的操作系统版本以及每个操作系统版本的转到,确保某些命令中的细微更改得到满足。
你也可以检查版本,并在脚本中设置版本,如下所示:
for /f "tokens=2 delims=[]" %%x in ('ver') do set WINVER=%%x set WINVER=%WINVER:Version =%