使用嵌套循环来比较和处理文件

时间:2015-03-25 18:02:43

标签: batch-file for-loop

我正在编写一个批处理脚本,它应循环遍历D:\ PushIDs文件夹中的文件夹并检查该文件是否存在于另一个驱动器E中:

有1000多个文件,我想浏览每个文件并将所有文件与E:drive中的内容进行比较。

如果它存在且文件已附加ReadyForProcessing,则返回D:\ PushIDs并处理该文件。

技巧是我唯一需要比较的是文件名的date-time部分。

D:\PushIDs我有许多类似于此文件的文件,所有更改都是date-time

PushID.2015.03.25.03.12.00.xml

并在E:驱动要比较的文件:

TOMetadata.2015.03.25.03.12.00--ReadyForProcessing.xml

到目前为止我所拥有的:

for /f %%F in ('dir /b D:\PushIDs\') do (

    set pushID=%%~nF
    set dateTimePID=%pushID:~7%

    for /f %%M in ('dir /b E:\*.xml') do (

        set toFileName=%%~nM
        set dateTimeTO=%toFileName:~11,19%

        if "%dateTimePID%"=="%dateTimeTO%" (

            if "ReadyForProcessing"=="%toFileName:ReadyForProcessing%" (

                echo fileProcessing_logic
            )
        )

    )

)

但如果我回显值,它会保持打印1000次以上的相同值

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:2)

您不需要嵌套循环

for /f "tokens=2-7 delims=.-" %%a in ('
    dir /b /a-d "e:\*ReadyForProcessing.xml"
') do if exist "d:\PushIDs\PushID.%%a.%%b.%%c.%%d.%%e.%%f.xml" (
    echo processing "d:\PushIDs\PushID.%%a.%%b.%%c.%%d.%%e.%%f.xml"
)

对于e:中的每个匹配文件(使用点和短划线作为分隔符标记的名称),如果d:中存在相应的文件,则处理它。