我正在运行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并且完全相同。任何帮助将不胜感激。
谢谢,
麦克
答案 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可能有助于确定是否有findstr
或findstr.bat
或findstr.com
以及 PATH <的目录/ strong>先找到。
第二个问题的答案 findstr 处理finstr.exe
*.ini
和ENVIRON.INI_20150902_0944
的原因是:
文件的简称是ENVIRON.INI_20150903_1035
和ENVIRON~3.INI
。
(这些数字很可能与您的计算机不同。)
findstr 和 dir 用于搜索具有给定模式的文件的内核函数还考虑了短文件名,而不仅仅是长文件名。运行ENVIRON~4.INI
,您会看到dir /S /X *.ini
找到的所有文件,因为长文件名或短文件名都匹配。
我不知道为什么*.ini
未在第一个输出中列出。也许您可以通过查看目录environ.ini
中所有*.ini
的简称来找出原因。