2011-05-17 153 views
21

我想要一個目錄中的所有csv文件,該文件名不包含單詞「summary」。裏面的命令提示符當我嘗試了上面的命令轉移到一個批處理文件,我碰上了管道命令的問題在不支持循環,我可以鍵入以下命令使用for循環和管道的批處理腳本

dir /b my_dir\*.csv | find /V "summary" 

。這是我不能做以下

FOR /f %%A in ('dir /b my_dir\*.csv | find /V "summary"') do (
rem want to do something here 
) 

有人能告訴我如何解決上述問題?

在此先感謝!

+0

DOS中沒有'for/f'。 [cmd.exe和DOS是完全不同的東西](https://superuser.com/q/451432/241386) – 2017-12-02 09:55:44

回答

-3

看看Windows PowerShell。不是我自己曾經使用過它,介意。

+0

不幸的是PowerShell是客戶想要去的路徑。 – Gilbeg 2011-05-17 06:00:39

+0

Powershell運行良好,但作爲一個筆記,我以前遇到從bat文件調用時不穩定(例如,調用powershell.exe-命令「等等等等等」)。這主要與PS subshel​​l永遠不會返回的自動化測試有關(儘管有「退出」命令)。我們沒有時間充分調查,但我想我會提到它。也許這會拯救別人頭痛的調試:) – TwoByteHero 2013-03-14 17:11:31

41

您需要轉義|字符以防止在解析循環命令時被解釋。使用^逃吧:

FOR /f "delims=" %%A in ('dir /b "my_dir\*.csv" ^| find /V "summary"') do (
rem do what you want with %%A here 
) 

一旦逃出外,|成爲' -delimited字符串的一部分。根據語法,只有當該字符串與循環分開時,它才被解釋爲特殊符號,作爲「子命令」。並且在解析循環之後完成

+1

不!我得到'find:'/ V':沒有這樣的文件或目錄 找到:'summary':沒有這樣的文件或目錄' – Gilbeg 2011-05-17 06:39:15

+0

@Gilbeg:適用於我。你確定你沒有錯過任何東西嗎? 'my_dir \ *。csv'是否包含空格?如果是這樣,它是用雙引號括起來的嗎?雖然這仍然不會產生錯誤信息。 – 2011-05-17 12:13:07

5

如果你遇到Gilbeg得到「find:/ V'的問題:沒有這樣的文件或目錄」,那麼很有可能你的路徑中有cygwin或類似文件,並且該批處理文件沒有使用Windows查找命令。如果您修改腳本以使用Windows查找的絕對路徑,那麼錯誤將消失:

FOR /f "delims=" %%A in ('dir /b "my_dir\*.csv" ^| %SYSTEMROOT%\system32\find.exe /V "summary"') do (
rem want to do something here with %%A 
) 
+2

歡迎來到StackOverflow。你很想爲此做出貢獻。不過,這是一個普遍的答案。如果您針對所問的問題定製您的答案會更好。請相應更新。 – kkuilla 2014-09-22 11:41:44