在您提供更多關於日期格式的信息之前,我無法給出明確的答案。但是我可以告訴你我將如何在我的機器上做到這一點。
我使用的文件和文件夾名稱中的YYYY-MM-DD格式,所以二零一一年十二月十三日是2011-12-13。我的機器使用日/月/年(yyyy)格式(12/13/2011)。所以我需要將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"
)
)
附錄 - 在評論問題問的方法左板用零對目錄創建一個數字。我看到兩個簡單的選擇。 (這確實應該是一個不同的問題)
這第一種方法是簡單的,但乏味和不實際的作爲一般溶液
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到前面,然後增加你在子運行維護中的字符數增加前導零的數目。
但是 - 爲什麼預填充目錄?您的策略會添加日曆中不存在的目錄日期,並且您可能會有很多未使用的文件夾,當天沒有文件被修改。最好只根據需要創建文件夾。然後,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"
)
)
更多信息 - 如何是你的約會文件夾格式化?例如,我在文件夾和文件名中使用yyyy-mm-dd。另外,您的機器如何設置顯示日期? DATE命令的輸出將回答第二個問題。例如,我的機器使用mm/dd/yyyy日期格式。 – dbenham