1

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

4

2 回答 2

4

你是:

  1. 将其作为命令放入批处理文件时转义管道?
    如果是这样,请不要逃离管道。

    dir c:\myfiles\mydirectories /s /b /ad |find "NOTE" |find "NOTES" /v
    
  2. 在子外壳中进行搜索调用?
    如果是这样,请在管道上保留转义字符。我的意思是:

    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. 如果以上均不适用,当此行是较大批处理文件的一部分时,您的错误是否会出现?如果是这样,你能完全分享吗?

于 2013-08-10T17:58:09.487 回答
4

你只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更多帮助。

于 2013-08-10T20:02:33.863 回答