2011-12-13 129 views
4

我寫了一個批處理文件,它爲每個日期創建空文件夾。我的下一個任務是創建另一個批處理文件,該文件根據修改的日期,將每個文件移動到相關的日期文件夾中。我已經閱讀了很多關於如何實現這個目標的論壇和文章,但是憑藉我有限的批處理文件知識,我似乎無法使其發揮作用。我現在的代碼如下所示,雖然這似乎沒有拉動修改日期。任何幫助深表感謝!按批改日期移動文件的批處理文件

SET directory="\directory\path\archive" 

FOR /f %%a in ('dir /b "%directory%"') do (

SET fdate=%%~Ta 

MOVE "%directory%\%%a" "%directory%\%fdate%" 
+0

更多信息 - 如何是你的約會文件夾格式化?例如,我在文件夾和文件名中使用yyyy-mm-dd。另外,您的機器如何設置顯示日期? DATE命令的輸出將回答第二個問題。例如,我的機器使用mm/dd/yyyy日期格式。 – dbenham

回答

11

在您提供更多關於日期格式的信息之前,我無法給出明確的答案。但是我可以告訴你我將如何在我的機器上做到這一點。

我使用的文件和文件夾名稱中的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" 
) 
) 
+0

是的!非常感謝你,稍微調整一下,我就能夠實現這個目標。實際上,我的文件夾結構如下...「%targetRoot%\ %% C \ %% A \ %% B」。這導致另一個問題。我創建日期文件夾的批處理文件不會爲日期1到9添加前導零,因此不適用於您提供的方法。循環是... FOR/L %% a IN(1,1,31)DO mkdir「\ directory \ path \ archive \%year%\%month%\ %% a」...我可以選擇批處理文件知識多一點?如果你不能幫助,這很好,我仍然會打勾你的答案! – tob88

+0

@TBenedyk - 完成。如果它確實回答你的問題,請接受答案。不要只是投票。 – dbenham

+0

這工作很好。我並不期待這樣一個徹底的答案。我希望我有更多的讚揚,非常感謝。 – tob88