Windows Batch Scripting~如何根据文件日期将文件移动到新文件夹

时间:2017-04-16 19:51:48

标签: windows file batch-file scripting command

我正在尝试处理文件夹中的所有文件,如下所示:

IMG_20161216_202848.jpg

IMG_20161216_203848.jpg

IMG_20161101_102848.jpg

IMG_20161102_112848.jpg

将被移动到这样的文件结构中:

2016年12月

- IMG_20161216_202848.jpg

- IMG_20161216_203848.jpg

2016年11月

- IMG_20161101_102848.jpg

- IMG_20161102_112848.jpg

如您所见,有一个顶级文件夹,其中包含Month - Year名称和文件的子内容。我希望从文件的上次修改日期获取顶级文件夹的月份和年份。这些文件需要递归提取,然后全部放入上面的结构中;没有更多的递归。不会有任何文件名重复,如果只是覆盖它。

实现上述目标的Windows批处理脚本命令是什么?

对于记录,我打开了一个也可以执行此操作的Windows应用程序 - 我使用一些参数进行设置,并为所有文件进行设置。

感谢。

2 个答案:

答案 0 :(得分:0)

@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
FOR /f "tokens=1-3delims=_" %%a IN (
 'dir /b /a-d "%sourcedir%\IMG_*_*.jpg" '
 ) DO IF "%%c" neq "" (
  SET /a dmonth="(%%b / 100) %% 100"
  SET /a dyear=%%b / 10000
  FOR %%m IN (January February March April May June
   July August September October November December) DO SET /a dmonth-=1&IF !dmonth!==0 (
   ECHO MD "%destdir%\%%m !dyear!" 2>nul
   ECHO MOVE "%sourcedir%\%%a_%%b_%%c" "%destdir%\%%m !dyear!\"
  )
)

GOTO :EOF

您需要更改sourcedirdestdir的设置以适合您的具体情况。

为了测试目的,所需的MOVE命令仅为ECHO在您确认命令正确后,将ECHO MOVE更改为MOVE以实际移动文件。附加>nul以取消报告消息(例如1 file moved

所需的MD命令仅用于ECHO用于测试目的。 在您确认命令正确无法后,将ECHO(MD更改为MD以实际创建目录。如图所示附加2>nul以禁止显示错误消息(例如,当目录已存在时)

此过程假定所有与IMG_*_*.jpg文件掩码匹配的文件名严格为IMG_ 8numerics _ .jpg。

阅读_上的每个源文件名和标记。取%%b中的第二个标记除以100并计算mod 100给出月份。将%%b中的日期除以10000给出年份。对于每个月份名称,递减dmonth,如果dmonth变为零,则%%m将包含月份名称作为文本,因此请使该目录忽略错误消息并移动文件。

适合子目录扫描和另一个文件掩码(请注意,这些看似微小的变化可能需要完全不同的方法)

@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
FOR /f "tokens=1-3delims=_" %%a IN (
 'dir /b /s /a-d "%sourcedir%\IMG_*_*.jpg" "%sourcedir%\VID_*_*.mp4" '
 ) DO IF "%%c" neq "" (
  SET /a dmonth="(%%b / 100) %% 100"
  SET /a dyear=%%b / 10000
  FOR %%m IN (January February March April May June
   July August September October November December) DO SET /a dmonth-=1&IF !dmonth!==0 (
   ECHO MD "%destdir%\%%m !dyear!" 2>nul
   ECHO MOVE "%%a_%%b_%%c" "%destdir%\%%m !dyear!\"
  )
)

GOTO :EOF

[未测试]

答案 1 :(得分:0)

由于您已明确允许Windows工具的建议来完成此任务,因此我建议使用Naru程序“FlexibleRenamer”(http://hp.vector.co.jp/authors/VA014830/english/FlexRena/)。

重命名文件并移动它基本上是相同的操作,您可以使用此程序查找文件夹树中的所有图像文件,使用其文件名的部分或上次访问日期来构建新的子文件夹并移动他们进入那个文件夹。对于像* .mp3这样的其他文件,它甚至可以读取和使用MP3标签。