【发布时间】:2017-10-08 12:50:09
【问题描述】:
在尝试重写批处理文件时,我正在研究使用 powershell 的可能性。我遇到的主要问题是 .ps1 文件默认情况下不可执行。我找到了一个解决方案here,我将在下面复制它,但我对第一行的语法感到非常困惑:
<# : 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 文件被解析,就好像每一行都是手动输入的。为什么通过脚本调用 # 时不抱怨是无效文件?
【问题讨论】:
-
你确定这不是多行注释,用于显示“旧”批处理文件代码?
标签: windows powershell batch-file cmd