小编Mat*_*ucy的帖子

批处理/ Powershell多语言中的奇怪重定向

在尝试重写批处理文件时,我正在研究使用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...
Run Code Online (Sandbox Code Playgroud)

这是我从测试中得知的:

  • 之间的空间<#:需要,虽然可以有多个.
  • 它也可能事先有一个0-9,例如3<# :,这让我怀疑有一些涉及重定向和标签的怪异.
  • 冒号后的文本被忽略,没有必要
  • 如果我在它之前添加一个命令,例如git <# : batch script,shell显示它试图评估git : batch script 0<#并且找不到指定的文件
  • 将更#改为有效的文件名会使投诉消失(自然)
  • 尝试在交互式会话中运行该行实际上会导致它抱怨无法找到指定的文件,但是从脚本运行它(即使它是.cmd文件中的唯一行)也会默认成功

最后一颗子弹是我想弄清楚的部分.环境有什么不同?我的理解是问题的一部分是运行bat文件被解析,好像每条线都是手动输入的.#当通过脚本调用时,为什么不抱怨是无效文件?

windows powershell cmd batch-file

7
推荐指数
1
解决办法
218
查看次数

标签 统计

batch-file ×1

cmd ×1

powershell ×1

windows ×1