【发布时间】:2015-02-10 07:25:28
【问题描述】:
在过去,我记得我们用来在 Windows cmd.exe 中运行 Perl 脚本的一个技巧,它是对 cmd 文件的简单调用,而不是必须使用脚本名称运行 perl.exe,例如:
@rem = '
@perl -x -S %0 %*
@goto :eof
@rem ';
<insert Perl script here>
这使用了相当巧妙的技巧,即利用 cmd.exe 和 perl.exe 处理输入脚本的方式的差异。 Windows 的cmd.exe 会将前三行作为三个单独的命令读取:
- 有没有回音的评论;
- 使用相同的输入文件和参数运行 perl,无需回显;和
- 转到文件末尾(退出),没有回显。
另一方面,perl.exe 会将前四行视为赋值语句,然后继续正确执行 Perl 脚本。
现在从 cmd.exe 命令行运行 Powershell 脚本通常很痛苦,因为您必须使用类似的东西:
powershell -file go.ps1
我想知道是否有办法将批处理 和 powershell 命令编码到单个 cmd 文件中,类似于 Perl 技巧,以这样的方式 开始 在 cmd.exe 下运行,但之后很快切换到 Powershell。
如果可能的话,您可以运行您的脚本go.cmd,只需输入:
go
在命令行中,而不是对powershell 进行一些复杂的调用。
我知道您可以发送单独 cmd 和 ps1 文件,但事实上我正试图摆脱这种情况。如果可能,我正在寻找单文件解决方案。
我也知道您可以对脚本进行 base-64 编码或将其作为字符串执行,前提是您将所有换行符替换为分号。但这意味着 Powershell 的内容在生成的文件中不再易于编辑或读取。
【问题讨论】:
-
无赖。是的,这显然是一个骗局,并且公认的答案显然优于我的答案。投票结束。
标签: powershell cmd