我的批处理脚本中有以下几行,这些行又调用 Powershell 命令将批处理文件自我提升为管理员。
@echo off && setlocal
if not "%1"=="admin" (powershell start -verb runas '%0' admin & pause & exit /b)
....
....
但是批处理文件路径本身以及结果
'%0'
尤其在%USERNAME%
(Vivek Shah)中包含空格,这就是为什么在调用此脚本时会抛出错误:
The term 'C:\Users\Vivek' is not recognized as the name of a cmdlet, function, script file, or
operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try
again.
At line:1 char:1
如何处理
'%0'
中的空格并使该脚本完美运行??
已经尝试过
'%~0'
和'"%0"'
,但显然两者都不起作用。
使用
%~f0
来引用正在运行的批处理文件的完整路径。
Start-Process
(其内置别名为 start
和 saps
),请将其括在 \"..."\
中(需要 \
转义)为了将(隐含的)-Command
参数传递给 powershell.exe
(Windows PowerShell CLI),将 "
字符作为要执行的命令的一部分传递)。
@echo off && setlocal
if not "%1"=="admin" (powershell start -verb runas \"%~f0\" admin & pause & exit /b)