批处理脚本中的多行PowerShell函数

22 浏览
0 Comments

批处理脚本中的多行PowerShell函数

我想运行一个调用一些powershell函数的.bat脚本。函数并不是很小,所以我想把它拆分开来。但是我无法做到,转义符并不能帮助我(`,`^)。

脚本示例:

set file=%1
set function="$file=$Env:file; ^
              $hash = CertUtil -hashfile $file SHA256 | Select -Index 1"
powershell -command %function%

0
0 Comments

在上述内容中,问题的出现原因是在批处理脚本中编写多行的PowerShell函数时,遇到了转义字符的问题。具体来说,当使用“^”作为多行字符时,它不仅转义了第一个字符,还转义了引号。这导致在最后一行函数中的引号被转义,从而导致脚本无法正确执行。

要解决这个问题,我们可以使用以下方法:

1. 将函数定义为单行:将整个函数定义为单行,而不是多行,以避免转义字符的问题。

2. 使用换行符代替多行字符:将多行字符“^”替换为换行符,以便在函数中使用换行进行分隔。

下面是修复后的代码示例:

set file=%1
set function="$file=$Env:file;
$hash = CertUtil -hashfile $file SHA256 | Select -Index 1;
example break line further...."
powershell -command %function%

这样,我们就可以在批处理脚本中正确地编写并执行多行的PowerShell函数了。

0
0 Comments

在这段内容中,问题的原因是在批处理脚本中混合使用了批处理语法和PowerShell。具体来说,$function=在批处理文件中是无效的,应该使用set function=代替。为了解决这个问题,可以将PowerShell代码放在一个变量中,并在启动PowerShell时使用-command参数来执行该变量。另外,还可以使用%name%来传递批处理脚本中定义的变量给PowerShell脚本。

此外,还有一种更简单的方法,即将PowerShell代码保存为.ps1文件,并在批处理文件中使用powershell -noexit -file .\script.ps1来运行该文件。

总结起来,问题的原因是混合使用了批处理语法和PowerShell,解决方法是使用正确的批处理语法和PowerShell参数,并考虑将PowerShell代码保存为.ps1文件来运行。

0