FOR命令 - 根据大小和日期移动文件(*白痴警报*)

时间:2014-06-10 13:21:31

标签: batch-file for-loop

我从失败的硬盘驱动器中恢复了大量图片。恢复程序将具有新文件名的所有文件转储到文件夹中。当文件夹达到特定大小时,它会创建一个新文件夹。我怀疑这是为了防止文件夹中的数千个文件使Windows崩溃的问题。我留下了许多文件夹,每个文件夹中有数百张图片。

为了更加了解这一切,我发现我可以按日期和大小排序。问题是使用资源管理器手动移动文件是永远的。我想得到一个批处理文件来为我做。

尽我所能,我只是无法弄清楚FOR命令。你在这里的stackoverflow人是远远超出我的力量的天才。请帮忙!

以下是文件夹名称:

recup_dir.1
recup_dir.2
recup_dir.3 and so on...

在每个文件夹中,我想拥有以下文件夹结构:

--Possibly New 
    ----Under .1 Meg
    ----.1 - 1 Meg
    ----1+ Meg
--Probably Already Have
    ----Under .1 Meg
    ----.1 - 1 Meg
    ----1+ Meg

编辑 New vs. Already Have基于文件日期。具有恢复日期的日期的文件是新的。这意味着从6月6日到更新的任何事情。任何具有较旧日期的东西可能是早期恢复尝试的一部分。

到目前为止,在.1 meg及更高文件夹中的图片数量并不多。我最终将这些全部转储到一个文件夹中。此时我甚至可以使用批处理文件。

有人会帮助我完成这件事吗?

1 个答案:

答案 0 :(得分:0)

这是航空代码(未经测试)但可能有效。它处理e:\folder中的文件夹,我对文件夹名称采取了一些自由。

@echo off
for /d %%a in ("e:\folder\*") do (
   pushd "%%a"
      md new\small new\medium new\large have\small have\medium have\large 2>nul
      for %%b in (*.*) do (
         echo "%%a\%%b"
         for /f "tokens=1-3 delims=/ " %%c in ("%%~tb") do if %%e%%c%%d GTR 20140605 (set new=1) else (set new=)
         if defined new (
            if %%~zb LEQ 100000 move "%%b" new\small >nul
            if %%~zb GTR 1000000 move "%%b" new\large >nul
            if exist "%%b" move "%%b" new\medium >nul
         ) else (
            if %%~zb LEQ 100000 move "%%b" have\small >nul
            if %%~zb GTR 1000000 move "%%b" have\large >nul
            if exist "%%b" move "%%b" have\medium >nul
         )
      )
   popd
)              
echo done
pause