我正在编写一个批处理文件,双击该批处理文件即可运行 PowerShell 脚本。我很难让批处理文件激活时执行任何操作。当我测试 ps1 文件时,PowerShell 脚本运行正常。但是一旦我从中调用批处理文件,它似乎就不起作用了。
批处理文件:
@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%FileNotifyscript.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%PowerShellScriptPath%""' -Verb RunAs}";
答案1
这是一个逃避问题,
- cmd 会将内部双引号解释为第一个引号的结束,
因为单引号仅对 PowerShell 具有特殊含义。 - 使用反斜杠转义一个
\"
双引号
:: Q:\Test\2019\04\22\SU_1428283.cmd
@ECHO OFF
SET "PowerShellScriptPath=%~dp0FileNotifyscript.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command ^
"& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File \"%PowerShellScriptPath%\"' -Verb RunAs}"
pause