将包含空格的参数(文件路径)传递给批处理文件中的Powershell命令,该文件本身位于带有空格的路径中

问题描述 投票:0回答:1

我的批处理脚本中有以下几行,这些行又调用 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"'
,但显然两者都不起作用。

powershell batch-file cmd command-line-arguments powershell-5.0
1个回答
0
投票
  • 使用

    %~f0
    来引用正在运行的批处理文件的完整路径

  • 为了确保此路径按原样传递到 PowerShell 的

    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)
© www.soinside.com 2019 - 2024. All rights reserved.