2010-05-19 386 views
4

我想編寫.bat腳本,它可以在所有類型的Windows下工作,不管是32位還是64位。如何在windows .bat腳本中檢查32位Program Files文件夾的位置

在這個腳本中,我想運行一些file.exe。該文件位於32位系統下的C:\ Program Files \或位於x64系統下的C:\ ProgramFiles(x86)\下。我可以這樣寫:

爲 「%ProgramFiles(x86)的%\ file.exe程式」 下,64位系統 或 爲 「%ProgramFiles%\ file.exe程式」 下,32位系統 但我想使腳本普遍。有什麼方法可以普遍確定這條道路嗎?

回答

6

你可以檢查它的存在&存儲路徑;

@echo off & setLocal enabledelayedexpansion 
if exist "C:\Program Files\app1.exe" (
set PPATH="C:\Program Files\" 
) else (
set PPATH="C:\Program Files(x86)\" 
) 

start "" %PPATH%app1.exe 
start "" %PPATH%app2.exe 
start "" %PPATH%app3.exe 
+0

該解決方案容易出錯。如果操作系統使用法語或德語怎麼辦?程序文件的文件夾名稱在那裏是不同的,至少在XP上(不知道關於Vista)。 – Sgali 2013-05-03 09:41:47

+1

公平點,如果您使用非英語區域設置,則可以分別用%PROGRAMFILES%和%PROGRAMFILES(x86)%替換硬編碼路徑 – 2013-05-03 10:04:21

+0

是的,在條件中使用%ProgramFiles(x86)%或%ProgramFiles%並且PPATH 檢查http://stackoverflow.com/questions/9594066/how-to-get-program-files-x86-env-variable – Sgali 2013-05-03 11:23:50

1

「whereis」是一個linux命令來做到這一點,但Windows端口是可用的(unxutils,我相信)。沒有它,你不會得到它。

1

我認爲應該使用VBScript/JScript文件而不是「bat」文件。這些腳本都可以由Windows腳本解釋器(wscript.exe/cscript.exe)執行。腳本環境和解釋器適用於所有類型的窗口,因此無需擔心。您可以找到遍歷目錄結構的代碼示例,使用VBScript檢查文件存在等。大部分可以使用FileSystemObject Object

4

VBS腳本:

set wshShell = createObject("WScript.Shell") 
    ''-----------------------------------  
    ''Get 32-bit program files path 
    ''----------------- 
    OsType = wshShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE")  
    If OsType = "x86" then 
      '''wscript.echo "Windows 32bit system detected" 
      strProgramFiles = wshShell.ExpandEnvironmentStrings("%PROGRAMFILES%") 
    elseif OsType = "AMD64" then 
      '''wscript.echo "Windows 64bit system detected" 
      strProgramFiles = wshShell.ExpandEnvironmentStrings("%PROGRAMFILES(x86)%") 
    end if 
1

爲了簡單起見,你總是可以做到以下幾點:

cd %PROGRAMFILES% 
cd %PROGRAMFILES(x86)% 
Program.exe 

這是假設你沒有做複雜的事情,但如果設置當前的目錄就足夠了,這應該可以正常工作。

相關問題