Bat文件中PowerShell命令报错:Out-File未识别,如何转UTF-8?
解决批处理中PowerShell转UTF-8的报错问题
这个错误是因为CMD(批处理的解释器)把你PowerShell命令里的括号和管道符当成了自己的语法,导致PowerShell还没拿到完整的命令,CMD就开始拆分执行了——它把Out-File当成了自己要执行的外部命令,自然找不到。咱们来修正一下:
基础解决方案(带BOM的UTF-8)
把整个PowerShell命令用双引号包裹,确保CMD把它作为一个完整的参数传递给PowerShell:
PowerShell -Command "Get-Content 'ZipCode.csv' | Out-File 'ZipCode1.csv' -Encoding utf8"
如果你的文件名包含空格,直接用单引号包裹文件名就好(PowerShell里单引号是字面量字符串,不需要转义),比如:
PowerShell -Command "Get-Content 'My Zip Code.csv' | Out-File 'My Zip Code1.csv' -Encoding utf8"
生成无BOM的UTF-8文件(兼容性更好)
默认Out-File -Encoding utf8生成的是带BOM的UTF-8,有些工具(比如部分Linux程序、旧版编辑器)不兼容。针对不同PowerShell版本,有两种处理方式:
1. PowerShell 6+(包括PowerShell Core)
直接用utf8NoBOM编码参数:
PowerShell -Command "Get-Content 'ZipCode.csv' | Out-File 'ZipCode1.csv' -Encoding utf8NoBOM"
2. Windows PowerShell 5.1(系统预装的旧版)
用.NET类直接写入,绕过PowerShell的默认BOM:
PowerShell -Command "[System.IO.File]::WriteAllLines('ZipCode1.csv', (Get-Content 'ZipCode.csv'), [System.Text.Encoding]::UTF8)"
更简洁的替代写法
用Set-Content代替Out-File,效果类似:
PowerShell -Command "Get-Content 'ZipCode.csv' | Set-Content 'ZipCode1.csv' -Encoding utf8"
注意:Windows PowerShell里Set-Content默认编码是ANSI,必须指定-Encoding utf8;PowerShell 6+里Set-Content默认就是无BOM的UTF-8,不加参数也可以。
内容的提问来源于stack exchange,提问作者Dimitris Markopoulos
相关产品推荐
相关产品推荐

