实例:在多行文本的每一行后面加上特定的字符串,并且删除重复的一行文本,保证每一行文本不重复。
如下图所示,预期需要达到的效果是采用批处理脚本在每行文本末尾加入特定字符",abc",并且有大于2个重复行的情况下删除重复行,保证所有行不重复。
具体实现的代码如下:
@echo off
>b.txt (for /f "delims=" %%l in (Fee.txt) do (
if not defined %%l (
set %%l=0
echo %%l,abc
)))
pause
代码实现的结果如下图所示,会将结果写入到Result.txt中,并且去除重复行。
此时,上述代码已经达到了预期,但是细心的人可能会发现,源文件夹的文档名称是英文字符Fee.txt,假如文件名称是中文字符费用.txt会怎样呢?代码此时变成如下:
@echo off
>b.txt (for /f "delims=" %%l in (费用.txt) do (
if not defined %%l (
set %%l=0
echo %%l,abc
)))
pause
运行代码得到如下结果:系统找不到文件 璐圭敤.txt,这表明文件并没有被批处理代码识别到,***原因是文本编辑器编码格式与windows系统控制台的默认编码格式不同,文本编辑器采用的是UTF-8的编码格式,而Windows系统默认的编码格式是ANSI,解决思路就是统一两种编码格式。***这个时候有两种解决办法:1.将文本编辑器的编码格式改为ANSI;2.将Windows系统控制台的编码方式改为UTF-8.
方法1:
将.bat批处理脚本右键编辑>文件>另存为,将编码格式更改为ANSI,然后保存,此时运行代码就可以得到正确的结果了。
方法2:
用代码将Windows控制台的编码修改成UTF-8,即在代码首行加入chcp 65001这句代码,chcp 65001是一个命令行命令,用于在Windows操作系统中设置当前控制台的代码页为UTF-8。此时运行代码也可以得到正确的结果。
@echo off
chcp 65001
>b.txt (for /f "delims=" %%l in (费用.txt) do (
if not defined %%l (
set %%l=0
echo %%l,abc
)))
pause
通过以上两种方法就可以识别中文字符串的源文件了,但是根据上面的讨论,此时若源文本文件的内容也是中文的,又不想修改批处理的代码,应该怎么处理呢?回顾上述的原理,不难发现可以运行相同的技巧来实现。
看到这里的人不妨可以试一下。