2017-04-05 72 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對 –