批量文件通过修改date来移动文件

我写了一个batch file,为每个date创build空文件夹。 我的下一个任务是创build另一个batch file,根据修改的date,将每个文件移动到相关的date文件夹中。 我已经阅读了很多关于如何实现这个目标的论坛和文章,但是由于我有限的batch file知识,我似乎无法使其工作。 我现在的代码显示如下,虽然这似乎并没有拉动修改的date。 任何帮助深表感谢!

SET directory="\directory\path\archive" FOR /f %%a in ('dir /b "%directory%"') do ( SET fdate=%%~Ta MOVE "%directory%\%%a" "%directory%\%fdate%" 

直到你提供更多的日期格式信息,我不能给出明确的答案。 但是,我可以告诉你,我将如何在我的机器上做到这一点。

我在文件和文件夹名称中使用yyyy-mm-dd格式,因此2011年12月13日将是2011-12-13。 我的机器在日期(12/13/2011)上使用mm / dd / yyyy格式。 所以我需要将2011年12月13日的%%〜tF输出翻译成2011-12-13。 注 – /不能用于文件或文件夹名称。

所以这个代码会在我的机器上做你想做的事情:

 set "source=\directory\path\archive" set "targetRoot=\directory\path\archive" for %%F in ("%source%\*") do ( for /f "tokens=1,2,3 delims=/ " %%A in ("%%~tF") do ( move "%%~fF" "%targetRoot%\%%C-%%A-%%B" ) ) 

附录 – 注释中的问题要求方法左键填充用于创建dir的数字。 我看到两个简单的选择。 (这真的应该是一个不同的问题)

这个第一种方法简单但乏味,并且作为一个通用的解决方案是不实际的

 for %%A in (01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31) do ... 

第二种方法是一个通用的解决方案。 由于您的任务在括号内,您需要使用延迟扩展。

 setlocal enableDelayedExpansion for /l %%A in (1 1 31) do ( set "day=0%%A" set "day=!day:~-2! ... ) 

通过在前面添加更多的0来增加前导零的数量,然后增加在子串操作中保留的字符数。

但是 – 为什么prepopulate目录? 您的策略将添加日历中不存在的目录日期,另外您可能还有许多未使用的文件夹,当天没有文件被修改。 最好只根据需要创建文件夹。 然后0填充已经完成,没有不必要的文件夹被创建。

 set "source=\directory\path\archive" set "targetRoot=\directory\path\archive" for %%F in ("%source%\*") do ( for /f "tokens=1,2,3 delims=/ " %%A in ("%%~tF") do ( if not exist "%targetRoot%\%%C\%%A\%%B" mkdir "%targetRoot%\%%C\%%A\%%B" move "%%~fF" "%targetRoot%\%%C\%%A\%%B" ) )