【问题标题】:Loop to search files efficiently starting from last modified file循环从最后修改的文件开始有效地搜索文件
【发布时间】:2013-06-18 02:10:23
【问题描述】:

我有一个包含大约 50 个子文件夹(称为 000100020003... 等)的文件夹,每个文件夹包含数百个文件(称为 0001_132.txt0002_312.txt0032_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

【问题讨论】:

  • 这应该是一个常规的 for 循环(没有 /f)和!subfolder! 变量:for /f %%x in (c:\data\subfolder\) do (

标签: loops batch-file


【解决方案1】:

如果您在处理完文件后使用 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

【讨论】:

  • 很好——总有其他方法可以给猫剥皮!
  • 嗨,你能提供更多细节吗?我在编写批处理文件方面很新……谢谢!
  • 我在上面的回答中添加了更多细节。
猜你喜欢
  • 2018-10-05
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 2015-02-06
相关资源
最近更新 更多