2012-02-18 52 views
0

我嘗試創建bat文件來迭代僅在目錄中的文件,其中文件名以特定字開頭。 例如:
的companyName .module1.exe
的companyName .module2.dll通過.bat迭代目錄中的特定文件

我知道如何遍歷文件,但不知道如何檢查他們的名字用於特定條件。

回答

1

以下添加到您的批處理文件:

for /F "eol=: tokens=*" %%A in ('dir /A-D /B "companyName*"') do (echo %%~fA) 

這個腳本會echo的所有文件與的companyName在當前工作目錄前綴開頭(僅文件)。將echo替換爲您想要執行的任何其他命令或命令。

更新1:爲了在不同的目錄看,你既可以

for /F "eol=: tokens=*" %%A in ('dir /A-D /B "pathToLookIn/companyName*"') do (echo %%~fA) 

pushd \ & cd "pathToLookIn" & (for /F "eol=: tokens=*" %%A in ('dir /A-D /B "companyName*"') do (echo %%~fA)) & popd 

pathToLookIn是一個完全合格的或相對路徑。

更新2:我已經更新了for /F循環處理與;開始爲@dbenham建議的文件名。

+0

你的代碼完美地工作,但是當我想使用特定的目錄時,它需要所有文件。我使用下一個命令 FOR('dir/B「Company *」/ b D:\ DLLS \ current')FOR/F「tokens = *」%% A do(ECHO %% A) 錯誤在哪裏? – Polaris 2012-02-18 10:43:33

+0

如何將當前工作目錄更改爲特定目錄? – Polaris 2012-02-18 10:46:49

+0

我現在在路上。我會盡快更新我的答案。 – mrvincenzo 2012-02-18 11:18:40

1

好吧,如果你知道如何遍歷文件,然後就用這些知識:

for %%f in (companyName*) do (
    ... 
) 

注意遍歷的dir輸出是容易出錯,而且在許多情況下裂傷Unicode字符。由於for能夠直接迭代,因此很少需要使用劣質選項。

+0

你用秒擊敗了我:) FOR/F ...('DIR ...')只有在DO子句修改目錄列表時才需要。簡單的FOR語句是不確定的 - 它可能會也可能不會看到更改。 FOR/F版本在處理DO子句之前緩衝DIR的輸出,因此它將始終與任何更改隔離。 – dbenham 2012-02-18 23:05:30

+0

啊,謝謝你的提示。這是我從未想過的限制,但我經常遇到Unicode(帶有Raster字體)。 – Joey 2012-02-18 23:09:34