2013-07-13 51 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

相关问题