2017-04-05 67 views
1

晚上好一批CMD为不同版本的Windows兼容的

我一直在寻找一些时间寻找一种方式,在本地测试一个批处理文件,将需要在几个版本的Windows(NT,2000,XP上运行,7,10)

我一直在搜索CMD.exe的版本,每个都无济于事。我在错误的地方看吗?或者这是不是前进的方向

感谢

在一个侧面说明,我发现有趣的Windows 10 CMD持有%OS%变量Windows_NT ......光怪陆离,假设一个古老的功能,被遗忘了呢?

+0

你试图让他们正在使用的Windows版本? –

+1

'ver'命令将显示构建版本。你可以查看这个页面来查看映射 - > https://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx – npocmaka

+0

@BaliC不用谢了,只是一些东西我偶然发现了微不足道的事情。很确定ver会打印windows版本。寻找一种方法来测试我的蝙蝠在Windows上的几个版本全部在我的Windows 10电脑 – ryan

回答

1

使用版本是非常不相关的。你会发现,运行

echo %cmdextversion% 

时,它已经永远被2。大部分命令在所有cmd.exe版本上都是一样的,除非你回到command.com

操作系统的变化有点不同,但是有一条细线几乎可以安全地使用批处理文件中的任何命令。

例如,您不应该回到做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%除外最新的OS”。

在64位的Windows一个侧面说明,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 =% 
+0

NT中没有DOS。在'.cmd'批处理中不需要短名称,它们只存在于FAT兼容性中。不能保证任何一个机器的短名称都是相同的。它们由FAT生成。 –

+0

是的,我知道,这些命令仍然是基于dos的,因此我将其命名为。我用短名称作为例子来证明一个观点,并不是说这是应该使用的。感谢您的评论。 –

+0

他们不是。 DOS意味着非常具体的东西。事实上,许多你认为是“DOS”的shell命令在DOS窗口中不起作用,例如在Windows Me中。一个例子是PUSHD/POPD对 –