Ein*_*969 1 windows powershell cmd batch-file
我要求第一个解释“这里”和“这里”,但要尝试更复杂的情况,我无法(经过两个小时的尝试)了解如何解决。我读了正则表达式的工作原理,但一无所获,我陷入了困境。
修改后的代码是这样的:
(Fsutil Dirty Query %SystemDrive%>Nul)||(powershell.exe -c "[Environment]::CommandLine; Start -Verb RunAs cmd /k, ("^""%~f0"^"" -replace '[;,()= &^]', '^$&')" & echo exit)
Run Code Online (Sandbox Code Playgroud)
带有毒字符的文件夹是这样的:
C:\Users\fposc\Desktop\Pie & tea % @ ' $^
Run Code Online (Sandbox Code Playgroud)
我尝试用 \^ 转义正则表达式中的 ^ 但不起作用。我也用 \( 和 \) 逃脱了 ( 和 ) 。但没有任何作用:
(Fsutil Dirty Query %SystemDrive%>Nul)||(powershell.exe -c "[Environment]::CommandLine; Start -Verb RunAs cmd /c, ("^""%~f0"^"" -replace '[;,\(\)= &\^]', '^$&')" & exit)
Run Code Online (Sandbox Code Playgroud)
我添加了圆括号,因为我想放置所有可能的字符以使代码尽可能通用。
我不知道我提出另一个问题是否正确。也许我应该改变原来的问题?由于其他组合也是可能的,并且不了解该机制,因此我可以提出许多其他类似的问题。你建议我做什么?
问题是文件夹 name 中存在$,这会导致 PowerShell 命令将其解释为变量引用的开头。
解决方法是使用 aux。环境变量来存储批处理文件的完整路径,并让 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)
Run Code Online (Sandbox Code Playgroud)
我已经更新了您最初问题的答案以合并此方法,该方法现在显示了一种 - 希望 - 按需重新调用具有levation的批处理文件的稳健方法,包括对参数的支持。
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |