有兩個甚至三個問題。
第一個是set Pass = Test
而不是set "Pass=Test"
,因爲已經報告了。有關如何將值權分配給環境變量的更多詳細信息,請參閱Why is no string output with 'echo %var%' after using 'set var = text' on command line?
我回答第二個問題是由網絡驅動器,一旦用戶到驅動器盤符映射,並在註冊表想起造成的事實由Windows在用戶註銷時會自動斷開連接,並且只有在同一用戶再次登錄時纔會重新連接。
對於計劃任務是非常因此經常需要使用的文件和文件夾的UNC路徑上的共享文件夾的網絡或連接網絡驅動器,並在自己的計劃任務執行的批處理文件斷開。
無法使用UNC路徑調用批處理文件。 Windows不允許這樣做。因此,需要在批處理文件中手動連接和斷開網絡共享。我爲這個問題提供了2個解決方案。
第一種是使用命令網使用:只有在計劃任務無法與具有的權限來訪問該批處理文件的用戶帳戶執行
%SystemRoot%\System32\net.exe use X: \\ComputerName\ShareName password /user:Domain\UserName /persistent:no
if not errorlevel 1 (
call X:\AutoMountConf.bat
%SystemRoot%\System32\net.exe use X: /delete
start "" /wait "C:\Program Files\TrueCrypt\TrueCrypt.exe" /auto favorites /p %Pass% /q
)
password
和/user:Domain\UserName
是必要的遠程機器。一般來說,使用正確的用戶帳戶定義計劃任務並確保此帳戶的密碼與任務一起更安全得多。 Windows存儲任務加密的密碼,就像它也爲用戶帳戶本身一樣。
在命令提示符窗口net use /?
中運行以獲取有關必需選項和可選選項的詳細信息。 /persistent:no
是避免記住Windows註冊表中的網絡共享以便在同一用戶登錄後自動重新連接。
第二個是使用命令PUSHD和POPD:
pushd \\ComputerName\ShareName
if not errorlevel 1 (
call AutoMountConf.bat
popd
start "" /wait "C:\Program Files\TrueCrypt\TrueCrypt.exe" /auto favorites /p %Pass% /q
)
請執行在命令提示符窗口pushd /?
和讀取輸出有助於理解爲什麼這個工程。
但是,此解決方案要求使用具有正確密碼的計劃任務的用戶帳戶對遠程計算機上的共享具有適當的權限。批處理文件本身不能使用此解決方案指定密碼和用戶名。
if not errorlevel 1
表示前一個命令退出NOT的值是否大於或等於1意味着上一個命令的退出代碼是否爲0,因此命令執行成功。它始終可能發生,遠程機器當前在網絡上不可用,因此在連接到遠程機器上共享時檢查成功總是很好的。
還有就是爲什麼Pass
沒有運行AutoMountConf.bat
後定義也許一個理由。
AutoMountConf.bat
包含SETLOCAL並執行該命令後,變量Pass
定義和ENDLOCAL之前在同一批處理文件被執行或由命令處理器隱含調用在離開AutoMountConf.bat
。
SETLOCAL結果在創造總是複製現有的環境變量和環境變量的所有修改都在這個本地副本完成。在執行(匹配)endlocal時或者在達到批處理文件結束時會恢復以前的環境變量,在這種情況下,命令處理器會自動恢復以前的環境。
請在命令提示符窗口setlocal /?
中執行並閱讀輸出幫助。
爲例子來理解的命令上Echoing a URL in BatchSETLOCAL和ENDLOCAL甚至更好看答案和Why is my cd %myVar% being ignored?
感謝您的詳細解釋! 解決的辦法是將批處理文件中的共享手冊映射爲網絡使用。 完美! – HansDampfHH