通过 Windows 批处理文件用文本文件中的 unicode 替换字符串

Replace string with unicode in text file via Windows batch file

我有一个包含以下简单内容的文件:

test.txt(ASCII编码)

Baby, you can drive my :car:

通过 Windows 批处理文件,我需要将 :car: 更改为 (https://unicode-table.com/en/1F697/)

我想避免在客户端的服务器上安装新软件,所以我尝试使用 PowerShell 或本机软件来安装。

到目前为止,我已经尝试了很多建议 (https://www.generacodice.com/en/articolo/30745/How-can-you-find-and-replace-text-in-a-file-using-the-Windows-command-line-environment?),但没有一个对我有用。要么它没有被替换,要么 \u1F697 字面上显示。我试过将入站文件的编码更改为 Unicode,但也不起作用。

非工作示例:

powershell -Command "(gc test.txt) -replace ':car:', '' | Out-File -encoding Unicode test.txt"

有人有什么建议吗?

编辑:我已经确定了如何重现它。

如果我通过命令行 运行 这一行,它会起作用:

powershell -Command "(gc test.txt) -replace ':car:', '' | Out-File -encoding utf8 test-out.txt"

如果我将同一行代码放在 replace.bat 中然后执行它,test-out.txt 已损坏。

批处理文件设置为 UTF-8 编码。应该有所不同吗?

我认为 .bat 文件不能使用非 ascii 编码。如果你愿意有一个文件。ps1文件:

(gc test.txt) -replace ':car:', '' | Out-File -encoding utf8 test-out.txt

文件必须在记事本中保存为 utf8 和 bom,而不仅仅是 utf8。

那么您的 .bat 文件将是:

powershell -file file.ps1

powershell ise 是一个很好的测试方法。

cmd /c file.bat
type test-out.txt


Windows .bat 脚本解释器不理解任何 Unicode 编码(例如 utf-8utf-16utf-16);最简单的原则是:

You have to save the batch file with OEM encoding. How to do this varies depending on your text editor. The encoding used in that case varies as well. For Western cultures it's usually CP850.

要使用任何 Unicode 字符(高于 ASCII 范围)作为传递给 PowerShell 命令的字符串的一部分,然后(而不是 '')应用 .NET method Char.ConvertFromUtf32(Int32);在 PowerShell 语法方面 [char]::ConvertFromUtf32(0x1F697)

在 ASCII 中,它与上述 .bat 编码规则不矛盾,PowerShell 会将其评估为 </code> 字符…</p> <p>那么,你的台词可以是这样的:</p> <pre><code>powershell -Command "(gc test.txt) -replace ':car:', [char]::ConvertFromUtf32(0x1F697) | Out-File -encoding Unicode test.txt"