findstr没有带回正确的文件

时间:2015-09-30 15:27:30

标签: cmd windows-server-2012-r2 findstr

我正在运行windows命令findstr,仅在.ini个文件中搜索特定的sting。我正在运行的命令findstr /i /s /m /C:\output *.ini正在查找字符串\output。以下是命令

的输出
etc\billdirfile.ini
etc\doc1dirfile.ini
etc\ENVIRON.INI_20150902_0944
etc\ENVIRON.INI_20150903_1035

我希望文件etc\environ.ini显示在该列表中,但事实并非如此。当我在末尾findstr /i /s /m /C:\output *.ini*添加一个通配符重新运行命令时,我的输出结果如下。

etc\billdirfile.ini
etc\doc1dirfile.ini
etc\ENVIRON.INI
etc\ENVIRON.INI.bak
etc\ENVIRON.INI_20150901_1021
etc\ENVIRON.INI_20150901_1050
etc\ENVIRON.INI_20150901_1431
etc\ENVIRON.INI_20150901_1433
etc\ENVIRON.INI_20150901_1438
etc\ENVIRON.INI_20150902_0944
etc\ENVIRON.INI_20150902_0954
etc\ENVIRON.INI_20150903_1035
etc\ENVIRON.INI_20150903_1042
etc\ENVIRON.INI_20150903_1344
etc\ENVIRON.INI_20150922_1305

基于此输出,我有两个问题。

1)为什么没有额外的通配符,即最后*.ini,我希望看到的environ.ini文件不显示?我检查了文件的名称,最后没有其他空格或字符。

2)为什么这两个文件

etc\ENVIRON.INI_20150902_0944
etc\ENVIRON.INI_20150903_1035

在没有添加通配符的情况下显示,即没有*.ini*。我希望我只会看到.ini个文件。

还在另一台机器上测试它

findstr /i /s /m /c:\output *.ini
etc\billdirfile.ini
etc\doc1dirfile.ini
etc\ENVIRON.INI
etc\ENVIRON.INI_20150825_1521

findstr命令找到etc\environ.ini文件没有问题。两台机器都运行服务器2012 R2并且完全相同。任何帮助将不胜感激。

谢谢,

麦克

1 个答案:

答案 0 :(得分:1)

在批处理文件中使用仅findstr的控制台应用程序的文件名而没有文件扩展名且没有完整路径时,命令行处理器首先在当前目录中搜索,然后在环境变量中定义的所有目录中搜索findstr*的路径,并检查找到的文件是否在环境变量 PATHEXT 中定义了文件扩展名。

要查看 PATH PATHEXT 的当前值,请在命令提示符窗口set path中运行,该窗口列出了以path开头的所有环境变量名。

由于NTFS文件系统驱动程序始终按字母顺序返回文件名,因此findstr.bat首先由命令处理器使用,如findst.exe之前找到的那样,可能也存在于通常不需要的同一目录中。顺便说一下:只有在找不到名称为cmd.exe且文件扩展名为 PATHEXT 的可执行文件时,才会使用echo的{​​{1}}内部命令。

因此,批处理文件中的echo只能在两台计算机之一上执行,而不会导致在Windows的system32目录中执行findstr,但使用不同的findstr.exe PATH 中的某个目录中找到,其中包含 PATHEXT 中列出的文件扩展名。

在批处理文件中指定具有完整路径和文件扩展名的findstr.*控制台应用程序总是更安全,即使用findstr.exe而不是%SystemRoot%\System32\findstr.exe

您应检查路径中列出的任何目录中是否存在名称为findstr且文件扩展名为 PATHEXT 的文件。 CheckPath之前的批处理文件Jason Faulkner可能有助于确定是否有findstrfindstr.batfindstr.com以及 PATH <的目录/ strong>先找到。

第二个问题的答案 findstr 处理finstr.exe *.iniENVIRON.INI_20150902_0944的原因是:

文件的简称是ENVIRON.INI_20150903_1035ENVIRON~3.INI

(这些数字很可能与您的计算机不同。)

findstr dir 用于搜索具有给定模式的文件的内核函数还考虑了短文件名,而不仅仅是长文件名。运行ENVIRON~4.INI,您会看到dir /S /X *.ini找到的所有文件,因为长文件名或短文件名都匹配。

我不知道为什么*.ini未在第一个输出中列出。也许您可以通过查看目录environ.ini中所有*.ini的简称来找出原因。