我正在编写一个批处理脚本,它应循环遍历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次以上的相同值
有谁知道我做错了什么?
答案 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:
中存在相应的文件,则处理它。