2013-07-13 50 views
0

我有一個腳本,它總是修改特定的文件。如何讓批處理腳本瀏覽文件夾?

findstr /s /m "BLABLABLA" C:\BLABLABLA\*.BLA > bla.bla 
if %errorlevel%=="0" (
    BLABLABLA 
) 

我知道「布拉布拉」是不是很透明......

如何製作一個BAT文件。該文件找到每個包含BLA擴展名的文件,其中包含每個地方的BLABLABLA,每個文件夾,每個分區。 Iterating through a folder using batch script它只在1個文件夾中有效。

+1

好澄清提問者想處理包含「BLABLABLA」所有文件 – joojaa

+0

哦,你的意思是。你爲什麼不告訴,並開始複雜化一切。 *忙於編輯*。 –

+0

請在您的問題中提供更好的細節。你想在一組驅動器號上找到* .txt文件嗎?這些文件必須包含一個「字符串」,所以我認爲他們需要是文本格式文件,對吧?腳本是否必須檢測所有驅動器號?如果在DVD驅動器中有DVD光盤,該怎麼辦?你可以在批處理文件中設置驅動器號的列表嗎? – foxidrive

回答

2

嘗試是這樣的:

@echo off 

setlocal 

set DRIVES=C D E F G H I J K L M N O P Q R S T U V W X Y Z 

(for %%d in (%DRIVES%) do (
    if exist "%%d:\" (
    pushd "%%d:\" 
    for /r %%f in (*.BLA) do (
     findstr /m "BLABLABLA" "%%~f" && (
     BLABLABLA 
    ) 
    ) 
    popd 
) 
)) > bla.bla 

稍微更優雅的方式將通過WMI枚舉本地驅動器:

@echo off 

setlocal 

(for /f %%d in (
    'wmic logicaldisk where drivetype^=3 get caption ^| find ":"' 
) do (
    pushd "%%d\" 
    for /r %%f in (*.BLA) do (
    findstr /m "BLABLABLA" "%%~f" && (
     BLABLABLA 
    ) 
) 
    popd 
)) > bla.bla 
+0

好的,但是。我想對* .BLA文件進行更改,可以在哪裏執行此操作? –

+0

@RikTelner你原來的問題不清楚你想要實際做什麼,所以你必須忍受某種模糊的答案。因爲你自己對錯誤級別的使用過於模糊。由於您的演示只在讀取多個文件時修改了一個文件,因此您不希望修改文件,這並不構成您的問題。我之所以沒有像上述那樣提出答案,是因爲我不明白錯誤檢查是什麼。但是id dint會發現你的新描述。 – joojaa

+0

這是我的問題,演示修改一個文件。我想修改所有文件... –

1

只是猜測是你要找的東西,如:

@echo off 

for /r %%f in (*.bla) do (
    for /f %%i in ('findstr /m "BLABLABLA" "%%~f"') do (
     echo do something to "%%~f" 
    ) 
) 

添加驅動器號解析表格Ansgar Wiechers post

+0

如果您還沒有處理輸出,則不需要內部循環。只要執行'findstr/m「BLABLABLA」「%%〜f」&&(...)'。 –

+0

@AnsgarWiechers是的,你的權利,行只是複製粘貼形式,實際上確實需要。無論如何,大多數情況下這個答案是多餘的,因爲你更新了你的答案 – joojaa

2

找到與BLA擴展名的所有文件,

包含BLABLABLA

每[...],每個文件夾,每個分區

嘗試:

for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do findstr /lsimpc:"BLABLABLA" "%%i:\*.BLA" 2>nul 

在每個地方,[...]

註明:place

+0

正是我想要的!你正確回答了我的三個問題。你真的很好!謝謝,它工作得很好,而且我想如何。你能給我提供一些關於%% i %% f等的信息嗎?因爲這些是我還不知道的,而且我不能Google,因爲Google不接受百分比符號。 –

+0

是否有可能製作文件名,打印在文件中?改變'> nul'到'> result.txt'不起作用。由於'result.txt'保持爲空,即使提示說有一個。 –

+1

試試這個:'for %% i in(C D E F G H I J K L M N O P Q R S T U V W X Y Z)do findstr/lsimpc:「BLABLABLA」「%% i:\ *。BLA」> result.txt 2> nul'。有關循環參數的基本幫助,您可以在命令行中找到'for /?',更高級的幫助...在網絡中,例如。 [dostips](http://dostips.com)。 – Endoro

相關問題