我正在尝试获取一个批处理文件以使用 Powershell 运行另一个批处理文件:
a.bat
POWERSHELL Start-Process -FilePath b.bat -ArgumentList 'a b','c d' -verb runas >nul 2>&1
b.bat
ECHO %1
ECHO %2
ECHO %3
ECHO %4
ECHO %*
SET /P=Press enter to exit...
我尝试了各种参数列表,但我无法传递带空格的参数。这是我根据我的尝试观察到的结果。希望其中至少有一些是错误的。
%*
中,但不包含在任何单个参数中。以下是我对论证列表的一些尝试,这些列表说明了上述内容:
'"a b","c d"'
'"a b" "c d"'
'`"a b`"'
'"`"a b`""'
'`""a b"`"'
'\\"a b\\"'
'\"a b\"'
- 错误'`'a b`''
- 错误如何传递带有空格的参数列表?
上下文:我的目标是运行一个 .bat,它使用参数调用另一个 .bat,然后使用 Powershell 以管理员权限调用自身,同时保留参数。我已经让它工作了,除非参数有空格。
使用双引号传递字符串值,然后使用
~
去除批处理脚本中的引号参数:
ECHO %~1
ECHO %~2
ECHO %*
SET /P=Press enter to exit...
然后:
Start-Process .\b.bat -ArgumentList '"a b"', '"c d"'
或者,直接调用脚本并让 PowerShell 负责引用参数:
# use splatting, let PowerShell handle argument quoting
$batchArgs = @('a b', 'c d')
& .\b.bat @batchArgs