我要求“這里”和“這里”的第一個解釋,但要嘗試一個更復雜的情況,我無法(經過兩個小時的嘗試)理解如何解決。我閱讀了正則運算式的作業原理,但什么也沒有,我進入了球。
修改后的代碼是這樣的:
(Fsutil Dirty Query %SystemDrive%>Nul)||(powershell.exe -c "[Environment]::CommandLine; Start -Verb RunAs cmd /k, ("^""%~f0"^"" -replace '[;,()= &^]', '^$&')" & echo exit)
帶有毒字符的檔案夾是這樣的:
C:\Users\fposc\Desktop\Pie & tea % @ ' $^
我試圖用 \^ 轉義正則運算式中的 ^ 但不起作用。我也用\(和\)逃脫了(和)。但沒有任何作用:
(Fsutil Dirty Query %SystemDrive%>Nul)||(powershell.exe -c "[Environment]::CommandLine; Start -Verb RunAs cmd /c, ("^""%~f0"^"" -replace '[;,\(\)= &\^]', '^$&')" & exit)
我添加了圓括號,因為我想放置所有可能的字符以使代碼盡可能通用。
我不知道我提出另一個問題是否正確。也許我應該改變原來的問題?由于其他組合是可能的并且不了解機制,我可以提出許多其他類似的問題。你建議我怎么做?
uj5u.com熱心網友回復:
該問題的存在$在你的檔案夾名稱,這將導致PowerShell命令將其解釋為一個變數參考的開始。
解決方法是使用輔助。環境變數來存盤批處理檔案的完整路徑,并讓 PowerShell 根據此變數的值執行其轉義:
:: Unless already elevated, re-invoke this batch file with elevation,
:: via PowerShell.
set "__THISFILE=%~f0"
Fsutil Dirty Query %SystemDrive% >Nul || (powershell.exe -c "Start-Process -Verb RunAs cmd /k, ($env:__THISFILE -replace '[ &%%^]', '^$&')" & exit)
我已經更新了您原始問題的答案以合并這種方法,它現在顯示了一種 - 希望 - 強大的方法來按需重新呼叫具有提升的批處理檔案,包括對引數的支持。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312626.html
