在尝试重写批处理文件时,我正在考虑使用powershell的可能性。我遇到的主要问题是默认情况下无法执行 .ps1
文件。我在这里找到了解决方案,我将复制以下内容,但我对第一行的语法非常困惑:
<# : batch script
@echo off
setlocal
cd %~dp0
powershell -executionpolicy remotesigned -Command "Invoke-Expression $([System.IO.File]::ReadAllText('%~f0'))"
endlocal
goto:eof
#>
# here write your powershell commands...
这是我从测试中了解到的:
- 在
<#
和:
之间需要空格,可以有多个。 - 它也可以有数字 0-9 在前面,例如
3<# :
,这让我怀疑可能涉及到重定向和标签的一些奇怪问题。 - 冒号后面的文本将被忽略且不必要。
- 如果我在其前面添加一个命令,例如
git <# : batch script
,则 shell 显示它尝试评估git : batch script 0<#
并找不到指定的文件。 - 将
#
更改为有效的文件名使投诉消失(自然而然)。 - 尝试在交互式会话中运行该行实际上会导致它抱怨无法找到指定的文件,但是从脚本中运行它(即使它是
.cmd
文件中的唯一行)会在不发出任何声音的情况下成功执行。
我正在努力弄清楚的是最后一条。环境有何不同?我的理解是运行 bat 文件时,它被解析为手动输入每行。为什么通过脚本调用时它不会抱怨 #
是无效文件?