现有若干以IP地址命名的文件,192.168.1.1.txt,192.168.1.2.txt等等等。。。需要统计每个文件中指定关键字所占的行数。这种重复性的字符查找工作用批处理来完成自然是再适合不过啦!整体思路很简单,使用for循环来遍历文件,使用find /c命令来进行关键字的查找,然后将结果输出到另一个文件,内容格式为:ip:n。关键代码如下:
for %%i in (*.txt) do (
find /c "keyword" %%i >> result.txt)
然而运行时提示:系统找不到指定的文件。经过测试发现,当find命令的目标文件路径中存在空格时,就会报出这样的错误。而当前的文件目录就是位于桌面,也就是“C:\Documents and Settings\Administrator\桌面\文件”,其中是有空格的。
为了解决这个问题,我们可以使用for命令的扩展参数%%~si(详见for /?)来替代%%i,它可以使用一个不含空格的短路径来代替较长的文件路径(包括文件名)。OK,程序运行的很顺利,我们满怀期待的打开result.txt,看到如下内容:“----------D:\DESKTOP\193920~1.TXT: 2”(本文是在家用的win7系统上写的,桌面路径在D盘,但足以说明文件名的问题)。可以看到,使用find /c 对文件进行查找时,结果包含文件路径和行数。然而我们由于使用了短路径,以至于连文件名也被压缩了,我们无从分辨谁是谁了TAT。我们当然可以在find语句后面再使用echo %%ni来输出一个不带路径的标准文件名,但是这个文件名会写入到下一行;而且短路径不但没有用而且严重影响了结果的视觉效果和格