0

2つの.exeがプログラムファイル(x86)にある可能性がある後のWindowsでも機能するように、以下のコマンドを含むWindows XP cmdバッチファイルを再コーディングするにはどうすればよいですか?

start "GW" /WAIT "%PROGRAMFILES%\GoldWave\GoldWave.exe" [...arguments...]
start "BC" /WAIT "%PROGRAMFILES%\Beyond Compare 3\BCompare.exe" [...arguments...]

これは失敗します:

PATH=%PATH%;%PROGRAMFILES%;%PROGRAMFILES(X86)%
...
start "GW" /WAIT "GoldWave\GoldWave.exe" [...arguments...]
start "BC" /WAIT "Beyond Compare 3\BCompare.exe" [...arguments...]

これは成功しますが、不器用です。

PATH=%PATH%;%PROGRAMFILES%\Goldwave;%PROGRAMFILES(X86)%\Goldwave;%PROGRAMFILES%\Beyond Compare 3;%PROGRAMFILES(X86)%\Beyond Compare 3%
...
start "GW" /WAIT "GoldWave.exe" [...arguments...]
start "BC" /WAIT "BCompare.exe" [...arguments...]
4

1 に答える 1

3

最初に、値があるかどうかを確認でき%ProgramFiles(x86)%ます。もしそうなら、あなたが探しているプログラムはそのディレクトリにあるはずです:

SETLOCAL
SET PROGRAMFILESINUSE=%ProgramFiles%
IF NOT "%ProgramFiles(x86)%"=="" SET PROGRAMFILESINUSE=%ProgramFiles(x86)%
START "GW" /WAIT "%PROGRAMFILESINUSE%\GoldWave\GoldWave.exe"

または、もう少し複雑にして、探しているファイルがどこにあるかを実際にチェックするようにすることもできます。

SETLOCAL
SET PROGRAMDIRECTORY=
SET RELATIVEFILEPATH=GoldWave\Goldwave.exe
CALL :CHECKFORPROGRAM "%RELATIVEFILEPATH%" "%ProgramFiles(x86)%"
CALL :CHECKFORPROGRAM "%RELATIVEFILEPATH%" "%ProgramFiles%"
IF "%PROGRAMDIRECTORY%"=="" GOTO :NOTFOUND
ECHO Found at %PROGRAMDIRECTORY%\%RELATIVEFILEPATH%
GOTO :EOF
:CHECKFORPROGRAM
IF NOT "%PROGRAMDIRECTORY%"=="" GOTO :EOF
IF EXIST "%~2\%~1" SET PROGRAMDIRECTORY=%~2
GOTO :EOF
:NOTFOUND
ECHO %RELATIVEFILEPATH% not found
GOTO :EOF
于 2013-01-15T23:48:39.500 に答える