在 powershell 里面,使用 echo 命令创建的 .bat 脚本就无法执行?

在 powershell 里面

echo 'echo 123' > test.bat
echo 'pause' >> test.bat

生成的的脚本双击之后一闪而过。

而换成普通的 CMD 窗口

echo 'echo 123' > test1.bat
echo 'pause' >> test.bat

生成的脚本可以双击执行。

阅读 2.8k
1 个回答

因为编码的问题,因为 powershell 的默认编码是 UTF-16,CMD 不认识这个,所以运行的时候会有问题。

image.png

为此,解决办法就有 2 个。
1、把文件转换为 UTF-8 无 BOM 格式。
可以手动使用 VS Code 之类的工具进行转换,也可以找个网站在线转换。

2、调整 powershell 的 > 因为,在 powershell 里面 > 实际上是 Out-File 的别名,所以你也可以像下面这也,指定编码为 ASCII,我当前测试是 Windows 10,使用 utf8 出来的是有 BOM 的,所以也会有问题,但是文档中说有 utf8NoBOM ,我这边暂时不可用,如果你的脚本没有中文输出,可以尝试一下。

echo 'echo 123' | Out-File -Encoding ascii -FilePath test.bat
echo 'pause' | Out-File -Encoding ascii -Append -FilePath test.bat

3、你还可以考虑修改 powershell 的默认编码(不建议)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进