通过 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-8
或 utf-16
或 utf-16
);最简单的原则是:
要使用任何 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"
我有一个包含以下简单内容的文件:
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-8
或 utf-16
或 utf-16
);最简单的原则是:
要使用任何 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"