我想运行.bat
-脚本,该脚本在其中调用一些powershell函数。功能不是很小,所以我想将其拆分。但是我做不到,转义符号无济于事(`,^
)。
脚本示例:
set file=%1
set function="$file=$Env:file; ^
$hash = CertUtil -hashfile $file SHA256 | Select -Index 1"
powershell -command %function%
答案 0 :(得分:3)
您可以像这样在每行的末尾加上引号:
set file=%1
set function="$file=$Env:file; "^
"$hash = CertUtil -hashfile $file SHA256 | Select -Index 1; "^
"example break line further...."
powershell -command %function%
^
用作多行字符,但也转义了第一个字符,因此也转义了引号。
答案 1 :(得分:1)
请勿将批处理文件语法与PowerShell混合使用。正如@Stephan所述,$function=
在批处理文件中不起作用。您需要改用set function=
。假设我要执行以下操作:
Get-Process
Get-ChildItem
然后代码应如下所示:
set function=Get-Process; ^
Get-ChildItem;
然后使用以下命令启动PowerShell
powershell -noexit -command %function%
-noexit
已添加,以便您可以验证代码是否已成功执行。
还请记住,传递给PowerShell的是批处理多行,而在PowerShell中它只显示为一行,因此您必须记住分号(您实际上是在做分号,但我在此留给以后的读者注意)。 / p>
还有另一个选项如何将变量从批处理脚本传递到PowerShell。您可以这样做:
set name=explorer
set function=get-process $args[0]; ^
get-childitem
powershell -noexit -command "& {%function% }" %name%
$args[0]
表示传递给脚本块的第一个参数。要传递该参数,请在启动%name%
时在脚本块后面添加powershell
。另外,如this answer中所指出的(在注释中指出此,请向@Aacini致谢),您必须添加&
运算符,并将脚本块放在大括号{ }
中。
边注:说实话,我避免运行这样的脚本。更简单的方法是将文件另存为.ps1
并在批处理文件中运行它:
powershell -noexit -file .\script.ps1