2012-07-16 73 views
0

我在這個特定命令中放置了很多變量,是否有一種方法可以在其中添加很多變量而不用重寫命令?如何將多個變量輸入到單個批處理命令中

dir c:\/s/b/a |找到「我的文件」

例如我想搜索「我的文件」和其他50個東西。

感謝您的答案

回答

0

你可以將它包裝在一個for循環:

for %i in ("my file" "second file") do dir c:\ /s /b /a | find %i 
+0

請注意,這將搜索_complete_「C」驅動器的每個文件來尋找。效率不高。 – 2012-07-17 04:30:56

+0

是的,我假設這是一個例子,而不是一個大目錄。在這種情況下,findstr是一個更好的內置解決方案。 – 2012-07-19 01:37:20

2

總之:沒有。你必須重寫命令,除非具體的命令實際上確實接受多個參數(可能是變量)。在你的情況下,它並不需要你重寫它。

一種選擇是使用findstr而不是find。您可以通過多種搜索模式:

dir c:\ /s /b /a | findstr /c:"my file" /c:"other" /c:"other 2" ... 

我不知道如何可以擴展至「50個其他的事情」,雖然,但隨後沒有這樣的解決方案可能。也許你可以使用正則表達式將文件名壓縮到視圖中(檢查findstr /?)。

你也可以簡單地做:

for /R c:\ %i in ("my file" "other" "other2") do @echo %i 

這兩種解決方案承擔重複的選項,但是。他們基本上是基於「包含」語義進行搜索。因此,「C:\ foo \ my file」和「C:\ foo \ bar \ my file \ something.txt」都會匹配。但那麼你的原始解決方案也有這個問題。

如果您可以使您的搜索模式獨一無二或能夠誤報,那麼這應該不是問題。但請注意。

+1

+1,但請參閱[我的回答](http://stackoverflow.com/a/11526089/1012053)中有關FINDSTR潛在問題的警告。 – dbenham 2012-07-17 15:47:10

+0

@dbenham感謝您的信息 - 很高興知道。 – 2012-07-18 05:42:40

2

擴展Christian的建議,使用FINDSTR而不是FIND - 您可以簡單地將所有50個搜索項放入文本文件中,並使用/G:"filename"選項參考它們。

但有一個重要的警告 - 搜索多個文字字符串時有一個討厭的FINDSTR錯誤。請參閱Why doesn't this FINDSTR example with multiple literal search strings find a match?

正如鏈接中所述,解決方法是使用/I選項執行不區分大小寫的搜索,或者使用正則表達式搜索條件和/R選項。

有關無證FINDSTR功能和錯誤的「完整」列表,請參見What are the undocumented features and limitations of the Windows FINDSTR command?

相關問題