以下命令在CMD窗口中正常工作。它列出了包含单词“NOTE”但不包含“NOTES”的目录。
dir c:\myfiles\mydirectories /s /b /ad |find "NOTE" | find "NOTES" /v
当我将命令放在批处理文件中时,CMD会抱怨invalid switch -v
。
dir c:\myfiles\mydirectories /s /b /ad ^|find "NOTE" ^|find "NOTES" /v
我做错了什么?感谢。
这是在Windows 7上。
答案 0 :(得分:3)
findstr
只需要一个管道:
dir c:\myfiles\mydirectories /s /b /ad|findstr "\<NOTE\>"
或使用for循环:
for /f "delims=" %%a in ('dir "c:\myfiles\mydirectories" /s /b /ad^|findstr "\<NOTE\>"') do echo %%~a
\<
是单词
开头的正则表达式
\>
是单词结尾的正则表达式
请参阅help findstr
以获取更多帮助。
答案 1 :(得分:2)
你是:
1)当您将此文件作为命令放入批处理文件时转义管道?如果是这样,请不要逃避管道。
dir c:\myfiles\mydirectories /s /b /ad |find "NOTE" |find "NOTES" /v
2)在子shell中调用搜索?如果是这样,请在管道上保留转义字符。 我的意思是:
for /f "delims=" %%a in ('dir c:\myfiles\mydirectories /s /b /ad ^|find "NOTE" ^|find "NOTES" /v') do echo Something
3)将命令保存在子shell中调用的批处理文件中?如果是这样,请丢弃转义字符。 我的意思是:
for /f "delims=" %%a in ('call <path to batch file containing your command>') do echo Something
4)如果以上都不适用,当此行是较大批处理文件的一部分时,是否显示错误?如果是这样,请你完全分享一下吗?