批量CMD用于不同版本的Windows兼容性

时间:2017-04-05 10:45:46

标签: windows batch-file cmd compatibility versions

晚安

我一直在寻找一种方法来寻找一种在本地测试批处理文件的方法,这种方法需要在多个版本的Windows上运行,(NT,2000,XP,7,10)

我一直在寻找各自的CMD.exe版本无济于事。我在找错了地方吗?或者这不是前进的方式

由于

另一方面,我发现有趣的Windows 10 CMD将%OS%变量视为Windows_NT ...奇怪,假设一个遗忘的旧功能?

1 个答案:

答案 0 :(得分:1)

使用该版本非常无关紧要。运行时会注意到

echo %cmdextversion%

永远是2。所有版本的cmd.exe上的大多数命令仍然相同,除非您要回到command.com

的日子

操作系统的更改会有所不同,但有一条细线可以保证批处理文件中的任何命令都是安全的。

例如,你不应该回到做cd C:\Progra~1的日子,而只是将包含路径的空间用引号括起来。

但是,问题的真正解决方案是在命令文件中进行操作系统检查,然后goto匹配每个操作系统。

大多数基于MS-Dos的命令仍然几乎相同,排除了仅在新系统上可用的新命令,但同样,在执行批处理部分之前检查ver可以绕过这些命令/ cmd文件。

以下是几乎适用于任何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操作系统上运行任何批处理文件,并确保通过检查脚本中的操作系统版本并遵循每个操作系统版本的转到,确保某些命令中的微小更改得到满足。

您也可以查看ver并在脚本中设置版本,如下所示:

for /f "tokens=2 delims=[]" %%x in ('ver') do set WINVER=%%x set WINVER=%WINVER:Version =%