将find命令放在批处理文件中

时间:2013-08-10 16:13:55

标签: batch-file

以下命令在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上。

2 个答案:

答案 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)如果以上都不适用,当此行是较大批处理文件的一部分时,是否显示错误?如果是这样,请你完全分享一下吗?