部分問題是%PATH%
包含空格。如果if
語句中比較運算符的任一側可能包含空格,則應引用兩個參數。
if not "%PATH:substr=repl%"=="%PATH%" do stuff....
接下來,你要提供一個變量作爲子到另一個變量。當你這樣做時,你需要延遲外部變量的擴展。
setlocal enabledelayedexpansion
if not "!PATH:%IEDRIVER%=!"=="!PATH!" do stuff....
endlocal
現在。而不是檢查PATH中是否存在絕對路徑,最好檢查一下您的ie和chrome目錄中的某個文件是否可以訪問PATH。您可以使用for
變量擴展語法來執行此操作。
for %%I in (ie chrome) do set %%I=
for %%I in (fileInIE.ext) do set "ie=%%~$PATH:I"
for %%I in (fileInChrome.ext) do set "chrome=%%~$PATH:I"
if defined ie....
if defined chrome...
但最大的問題是使用setx
修改%PATH%
是破壞性的,應該避免。包含PATH的註冊表值有意使用未擴展的變量,並保存在可在運行時擴展它們的數據類型中。使用setx
將它們擴展得太早。如果要以編程方式修改路徑,最好直接修改註冊表。這並不容易,但破壞性較小。
@echo off
setlocal
for %%I in ("%~dp0..\ie") do set "IEDRIVER=%%~fI"
for %%I in ("%~dp0..\chrome") do set "CHROMEDRIVER=%%~fI"
for %%I in (ie chrome) do set %%I=
for %%I in (fileInIE.ext) do set "ie=%%~$PATH:I"
for %%I in (fileInChrome.ext) do set "chrome=%%~$PATH:I"
if not defined ie call :append_path "%IEDRIVER%"
if not defined chrome call :append_path "%CHROMEDRIVER%"
goto :EOF
:append_path <val>
set "env=HKLM\System\CurrentControlSet\Control\Session Manager\Environment"
for /f "tokens=2*" %%I in ('reg query "%env%" /v Path ^| find /i "REG_EXPAND_SZ"') do (
rem // make addition persistent through reboots
reg add "%env%" /f /v Path /t REG_EXPAND_SZ /d "%%J;%~1"
rem // apply change to the current process
for %%a in ("%%J;%~1") do (path %%~a)
)
rem // use setx to set a temporary throwaway value to trigger a WM_SETTINGCHANGE
rem // applies change to new console windows without requiring a reboot
(setx /m foo bar & reg delete "%env%" /f /v foo) >NUL 2>NUL
color 4E
echo Warning: %%PATH%% has changed. Reopen the console to inherit the changes.
goto :EOF
優秀的答案!但是,'設置'IEDRIVER =%〜dp0 .. \ ie「'結果到'fullScriptPath \ .. \ ie'從字面上看。這個'\ .. \'(即明顯的_parent文件夾_)將如何在'path'環境變量中解析?無論如何,這似乎是一個醜陋的東西......我會用'set'batDir =%〜dp0「''&'設置」batDir =%batDir:〜0,-1%「''' %% g in(「%batDir%」)設置爲「Parent = %%〜dpG」&'set「IEDRIVER =%Parent%ie」' – JosefZ 2015-04-03 21:43:16
或'for %% I in(「%〜dp0 .. \即「)確定」IEDRIVER = %%〜fI「也可以。我的目的更多的是教導而不是解決問題,而且我不想讓腳本完全無法識別OP。無論如何,我想我的答案結束了。我會根據你的建議修復'..'部分。 – rojo 2015-04-04 01:21:20
完美匹配'%%〜fI',因爲您實際上不需要_parent folder_。然而,我已經在'path'裏測試了這個令人討厭的'\ .. \',它運行得很好...... – JosefZ 2015-04-04 12:11:29