findstr在Windows批处理脚本中不返回任何内容

时间:2012-04-30 17:55:09

标签: windows batch-file findstr

在Windows cmd中,temp dir设置为

 C:\spec>echo %temp%
 C:\Users\mahmood\AppData\Local\Temp

还有一个包含

的文件%temp%\ specdev.txt
 C:\spec>type %temp%\specdev.txt
 c:\cpu

现在我执行此命令

findstr -r "^[a-zA-Z]:$" %temp%\specdev.txt >nul 2>&1

它不会返回任何东西!!

C:\spec>findstr -r "^[a-zA-Z]:$" %temp%\specdev.txt >nul 2>&1

C:\spec>

问题是什么?你能解释一下这个命令是做什么的吗?它是批处理脚本的一部分。

3 个答案:

答案 0 :(得分:3)

您无法看到任何结果,因为所有控制台输出都被重定向到NUL:命令的最后一部分>nul将标准输出重定向到NUL,2>&1将错误输出重定向到标准输出(因此,NUL)

因为此命令是脚本的一部分,所以它并不意味着它无用:FINDSTR在找到匹配时将全局环境变量%ERRORLEVEL%设置为0,并在找不到时将其设置为1。因此,脚本可以将所有输出发送到NUL(而不是阻塞用户屏幕)并检查%ERRORLEVEL%以验证结果。

关于此命令正在搜索的模式,"^[a-zA-Z]:$"表示它搜索的行只包含从“a”到“z”(大写和小写)的单个字母,并以冒号结尾“: ”。因此,您描述的文件%temp%\specdev.txt与表达式不匹配。

答案 1 :(得分:0)

试试这个而不是findstr -r“^ [a-zA-Z] * $”%temp%\ specdev.txt> nul 2>& 1

答案 2 :(得分:0)

问题是字符串与正则表达式不匹配,正则表达式匹配的行除了单个字母后跟':'个字符外。

所以现在问题是,你真正想要匹配的模式是什么?也许你想要:

"^[a-zA-Z]:"

将匹配以字母后跟':'开头的行(但可以在该行后面跟随其他字符)。但我怀疑你想要更复杂的东西。