2013-10-03 96 views
0

方案如何根據運行批處理文件的Windows版本來設置windows批處理變量?

讓我們假設一個應用程序安裝在Windows XP和Windows 7上,單個用戶,它安裝在這些2操作系統以下目錄:

的Windows XP:

C:\Documents and Settings\<user_name>\Local Settings\Application Data\<target-folder> 

的Windows 7:

C:\Users\<user_name>\AppData\Local\<target-folder> 

我想要創建一個批處理腳本,將腳本中的目標文件夾目錄分配給一個變量。

問題

什麼是設置基於哪個版本的腳本在運行Windows的批處理腳本變量最簡單,最可靠的方法?

示例答案

set targetDir = ? 

回答

0

進一步研究後,我發現這個resource是既簡單又健壯,因爲它檢測或Windows的所有版本,而不僅僅是Windows XP中的Windows 7

-1

的回答是, 「這取決於」。

例如,我在工作時控制計算機設置,而我們的Windows 7計算機都是64位的,因此我可以檢查C:\Program Files (x86)

所以,我做這樣的事情:

IF EXIST "C:\Program Files (x86)" (
    SET TargetDir=C:\Users\<user_name>\AppData\Local\<target-folder> 
) ELSE (
    SET TargetDir=C:\Documents and Settings\<user_name>\<target-folder> 
) 

當然,這些都不是萬無一失的,但他們對我的工作需要。

如果您正在談論的是您不控制或使用不同語言的計算機,那麼事情會變得更加複雜。

+0

試探性地試圖「找出」你是什麼操作系統就像你說的那樣,充滿危險。 Endoro的解決方案似乎是一種更穩健的方法來確定您是否在XP上 – weloytty

+1

Ouch ...對於工作解決方案而言是一種倒退? – aphoria

+0

你,你是對的,我刪除downvote – weloytty

1

有一個名爲%USERPROFILE%可用於查詢配置文件路徑名%APPDATA%一個環境變量。

一般使用WMIC查詢這樣的信息,它可以在XP(專業但不是家),Vista,Windows 7,Windows 8和服務器。例如要獲取操作系統名稱使用:

WMIC OS GET caption 

或名稱而不是標題,如果你想要更多的信息。您可以詢問其他數據,如OSArchitecture,它會告訴您它是32位還是64位。還可以組合查詢,像這樣:

WMIC OS GET caption, osarchitecture, muilanguages 

你可以得到完整的列表與WMIC操作系統,但閱讀WMIC的文檔就可以做很多不同的查詢和任務,如列出所有用戶。但真正的缺點是,你可以查詢其他用戶的環境中使用:

wmic ENVIRONMENT 
:: and 
wmic /user user ENVIRONMENT 

最後但並非最不重要的,如果連版無法給你一個線索,你可以使用

IF EXISTS C:\Users 

要確定是否存在的文件夾。

2
ver | find "XP" >nul && (
    set "TargetDir=%USERPROFILE%\Local Settings\Application Data\[target-folder]" 
) || (
    set "TargetDir=%USERPROFILE%\AppData\Local\[target-folder]" 
) 
echo "%TargetDir%" 
+0

這是至少簡單,如果不是很健壯。 – joojaa