0

我有一个包含大约 50 个子文件夹(称为0001, 0002, 0003... 等)的文件夹,每个子文件夹包含数百个文件(称为0001_132.txt, 0002_312.txt, 0032_152.txt... 等),我需要运行一个批处理文件来提取我尚未处理的文件自上次运行批处理文件以来。

我目前的做法是保存一个.txt文件,告诉我上次更新期间提取的最后一个文件的文件名。下次我运行批处理文件时,它会遍历子文件夹,直到到达该特定文件名,然后开始提取比该特定文件更新的文件。

我不确定我这样做的方式是否好,但它确实有效。但是,由于我在文件夹中有很多文件,每次批处理文件在提取新文件之前读取所有旧文件,这会导致程序运行相当长的时间。所以,我想问一下,有没有办法不循环遍历那些旧文件?

记录最后更新文件的文件如下所示:

last_update.txt: format([subfoldername]_[file].txt)

例如: 0001_134 0002_213 。. 0050_241

我的批次看起来像这样:

for /f %%a in (C:\last_update.txt) do (
  set number=%%a
  set "subfolder=!number%:~0,4!"
  set reach=0
  for /f %%x in (c:\data\subfolder\)  do (
    if %%~nx==!number! (
      set reach=1
    )
    if not %%~nx==!number! if !reach!==1 (
      DO THE EXTRACTION
    )
    set latest_File=%%~nx
  )
  echo !latest!>>last_update_temp.txt
)

del last_update.txt
ren last_update_temp.txt last_update.txt
4

1 回答 1

4

如果在处理文件后使用 attrib 命令清除存档位,则可以使用 xcopy 和 /l 来获取设置了存档位的新文件的列表。

这是一个示例 - 假设文件已经被处理并且新文件正在等待归档位设置。处理完文件后,最后一行将删除所有存档属性。

它所做的只是在下面的循环中回显具有存档属性集的每个文件的 drive:\folder\filename.txt,然后暂停。

由于正在处理的文件数量较多,它使用临时文件,否则可能会导致长时间延迟。

@echo off
dir *.txt /aa-d /b /s >file.tmp
for /f "delims=" %%a in (file.tmp) do (
rem do your task with all the files
echo "%%a"
pause
)
del file.tmp
attrib -a *.txt /s
于 2013-06-18T04:38:05.623 回答