Batch file 在文本文件中批量搜索unicode字符串

Batch file 在文本文件中批量搜索unicode字符串,batch-file,unicode,Batch File,Unicode,我试图在文本文件中查找unicode字符串。我的程序在搜索普通字符时运行良好,但现在我不知道如何使用UTF-8 这就是我对我的程序所做的: FOR %%a IN (\\%ip%\Print\*.txt) DO (findstr /c:"hallo" "%%a"... 这就是我现在想要做的: FOR %%a IN (\\%ip%\Print\*.txt) DO (findstr /c:"привет" "%%a" 希望有人能帮助我:)FINDSTR无法正确读取或搜索任何形式的u

我试图在文本文件中查找unicode字符串。我的程序在搜索普通字符时运行良好,但现在我不知道如何使用UTF-8

这就是我对我的程序所做的:

    FOR %%a IN (\\%ip%\Print\*.txt) DO (findstr /c:"hallo" "%%a"...
这就是我现在想要做的:

    FOR %%a IN (\\%ip%\Print\*.txt) DO (findstr /c:"привет" "%%a"

希望有人能帮助我:)

FINDSTR无法正确读取或搜索任何形式的unicode。它只适用于单字节ANSI(扩展ASCII)编码

但是可以将UTF-8文件视为扩展ASCII并完成搜索,尽管它不会将结果正确地打印到控制台

诀窍是将搜索字符串放在另一个UTF-8文件中。对于本例,假设搜索字符串存储在“find.txt”中,使用UTF-8编码(无BOM)

FINDSTR不会理解多字节unicode代码点,而是将每个字节解释为一个字符。任何多字节unicode代码点都会错误地打印到控制台,但会打印正确的匹配行

如果将输出重定向到文件,则生成的文件将具有正确的UTF-8编码


请注意,您必须使用
/G:file
选项。不能使用
/C:“string”
选项,因为FINDSTR不正确地解释包含0x80以上字节值的命令行参数。有关详细信息,请参阅位于的标题为“命令行参数的字符限制-扩展ASCII转换”的部分。

FINDSTR无法正确读取或搜索任何形式的unicode。它只适用于单字节ANSI(扩展ASCII)编码

但是可以将UTF-8文件视为扩展ASCII并完成搜索,尽管它不会将结果正确地打印到控制台

诀窍是将搜索字符串放在另一个UTF-8文件中。对于本例,假设搜索字符串存储在“find.txt”中,使用UTF-8编码(无BOM)

FINDSTR不会理解多字节unicode代码点,而是将每个字节解释为一个字符。任何多字节unicode代码点都会错误地打印到控制台,但会打印正确的匹配行

如果将输出重定向到文件,则生成的文件将具有正确的UTF-8编码


请注意,您必须使用
/G:file
选项。不能使用
/C:“string”
选项,因为FINDSTR不正确地解释包含0x80以上字节值的命令行参数。有关更多信息,请参见标题为“命令行参数字符限制-扩展ASCII转换”的部分。

hey@dbenham,谢谢您的回答。但是我仍然有一些问题:我想更改包含合适文本的文本文件的名称,因此当我尝试重命名它时:如果不是errorlevel 1(重命名“%%a”“bye.txt”),它不会重命名实际文件,而是我的帮助文件(find.txt)。。。有没有任何关于我做错了什么的建议?@Uli-不,我不明白你想做什么的逻辑。这听起来像是另一个问题。@dbenhm好吧,问题仍然是关于findstr和您的解决方案:假设我有4个文本文件findEng.txt findRus.txt Eng.txt和Rus.txt。在英文文件中,只有普通字符(hello)在其他UTF-8(Пццццц)中。因此,当我运行批处理findstr/g:findEng.txt Eng.txt时,会在控制台中提示我hello。。。对于findstr/g:findRus.txt Rus.txt,控制台不应该以等效的ansi字符提示这一点吗?它没有这样做。在我的findRus.txt文件中有╗┐ 在我真实的角色面前。。。这就是它不起作用的原因吗?@Uli-仔细阅读我答案的第4和第5段,你应该有你的答案。将findRus.txt搜索的输出重定向到一个新文件,并查看结果-它应该是UTF-8编码的正确结果(但没有任何BOM,除非原始文件有BOM,并且您恰好与原始文件中的第一行匹配)。嘿@dbenham,谢谢您的回答。但是我仍然有一些问题:我想更改包含合适文本的文本文件的名称,因此当我尝试重命名它时:如果不是errorlevel 1(重命名“%%a”“bye.txt”),它不会重命名实际文件,而是我的帮助文件(find.txt)。。。有没有任何关于我做错了什么的建议?@Uli-不,我不明白你想做什么的逻辑。这听起来像是另一个问题。@dbenhm好吧,问题仍然是关于findstr和您的解决方案:假设我有4个文本文件findEng.txt findRus.txt Eng.txt和Rus.txt。在英文文件中,只有普通字符(hello)在其他UTF-8(Пццццц)中。因此,当我运行批处理findstr/g:findEng.txt Eng.txt时,会在控制台中提示我hello。。。对于findstr/g:findRus.txt Rus.txt,控制台不应该以等效的ansi字符提示这一点吗?它没有这样做。在我的findRus.txt文件中有╗┐ 在我真实的角色面前。。。这就是它不起作用的原因吗?@Uli-仔细阅读我答案的第4和第5段,你应该有你的答案。将findRus.txt搜索的输出重定向到一个新文件,并查看结果-它应该是UTF-8编码的正确结果(但没有任何BOM,除非原始文件有BOM,并且您恰好与原始文件中的第一行匹配)
for %%a in ("\\%ip%\Print\*.txt") do findstr /g:find.txt "%%a"