Batch file 对于命令-根据大小和日期移动文件(*IDOIT alert*)

Batch file 对于命令-根据大小和日期移动文件(*IDOIT alert*),batch-file,for-loop,Batch File,For Loop,我从一个出故障的硬盘上恢复了大量图片。恢复程序将所有具有新文件名的文件转储到文件夹中。当文件夹达到一定大小时,它将创建一个新文件夹。我怀疑这是为了防止文件夹中数千个文件使Windows发疯的问题。我留下了许多文件夹,每个文件夹中有数百张图片 为了更好地理解这一切,我想我可以按日期和大小来分类。问题是使用资源管理器手动移动文件要花很长时间。我想得到一个批处理文件来为我做这件事 尽管我可能会尝试,但我无法理解FOR命令。你们这些在stackoverflow的人是我力所不及的天才。请帮忙 以下是文件夹

我从一个出故障的硬盘上恢复了大量图片。恢复程序将所有具有新文件名的文件转储到文件夹中。当文件夹达到一定大小时,它将创建一个新文件夹。我怀疑这是为了防止文件夹中数千个文件使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
根据文件日期编辑新版本与现有版本。具有恢复日期的文件是新的。这意味着6月6日以后的任何事情。任何日期较早的东西都可能是早期恢复尝试的一部分

到目前为止,在.1 meg和更高版本的文件夹中没有多少图片。我最终会把这些都放到一个文件夹里。此时,我甚至可以使用批处理文件来实现这一点


有谁能帮我完成这件事吗

这是未经测试的air代码,但可能有效。它处理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

一些恢复程序也可以恢复文件名-可能值得使用不同的软件重试恢复。我已经完成了一次恢复,包括文件名、日期和文件夹结构。我丢失了很多文件。当前的恢复得到的东西不包括名称。它有可以获取文件的日期。具有正确日期的文件似乎是我在上一次恢复中恢复的文件。带有新日期的文件是我在第一次恢复时没有得到的文件。是否有文件大小超过2 GB的文件?批处理数学最高可达2 GB。请解释这两组目标文件夹。我们怎么知道哪个是哪个?到目前为止,我还没有发现任何超过10兆的东西。我忘了加上新的和已经有的是如何运作的。“新”是指日期为2014年6月6日或更新的任何内容。已有文件的原始文件日期是在驱动器崩溃之前创建的。我用这些关于日期的新信息编辑了原始帖子。对于*.do echo%~ta%~za&pause中的%a,我得到的只是“命令的语法不正确”。我去掉了@echo off和所有的>nul,以查看是否有任何其他输出可帮助诊断,但没有得到任何其他帮助。我在21小时前对其进行了初步测试,而且确实改变了它。您是否再次尝试复制和粘贴上面的代码?在一些示例文件上测试它。我已经创建了三个文件夹的副本,可以使用它们,但它们在文件夹结构中相当深入。我只是把它们移到了驱动器的根目录下,去掉了名称中的所有空格,看看这是否会有所不同,但我仍然得到相同的错误。我在l:\testmove\*do echo hello中将命令缩短为:for/d%%a,这也导致:命令的语法不正确。将同一命令直接放在命令行中删除一个%符号将导致预期的输出。它打印hello三次并退出。我的理解是,不管它有多差,在批处理文件中使用变量名double%%,在命令行中直接使用变量名single%。对否?是否从cmd提示符执行此操作?这是一个批处理文件。您的文件夹是否在L:\testmove文件夹中?