2014-12-02 77 views
0

我當前運行批處理命令以在高級中創建1天文件夾並將其標記爲MMDDYY。 除了單位數天,所有內容都按預期工作。目前它命名爲第二天的文件夾有12214,是否有可能將其命名爲120214?批處理命令 - 在文件夾末尾添加日期

@echo off 

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 
set "YY=%dt:~2,2%" 
set "YYYY=%dt:~0,4%" 
set "MM=%dt:~4,2%" 
set "DD=%dt:~6,2%" 
set "HH=%dt:~8,2%" 
set "Min=%dt:~10,2%" 
set "Sec=%dt:~12,2%" 

:loop 
    set /a DD+=1 

    if %DD% gtr 31 (
    set DD=1 
    set /a MM+=1 

    if %MM% gtr 12 (
     set MM=1 
     set /a YY+=1 
     set /a YYYY+=1 
    ) 
) 
xcopy /d:%MM%-%DD%-%YYYY% /l . .. >nul 2>&1 || goto loop 

echo %DD%/%MM%/%YYYY% 
mkdir "C:\Users\Name\Desktop\%mm%%dd%%yy%\" 

pause 
+0

你應該重新考慮你的命名約定。應該避免使用2位數字 - 用4代替。此外,你應該使用yyyymmdd,以便文件夾按時間順序排序。 – dbenham 2014-12-02 18:35:34

回答

0

一旦操作完成,您需要重新填充數據。你還需要一些更多的邏輯來處理這個月變化

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    rem Retrieve data 
    for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 
    set "YY=%dt:~2,2%" 
    set "YYYY=%dt:~0,4%" 
    set "MM=%dt:~4,2%" 
    set "DD=%dt:~6,2%" 
    set "HH=%dt:~8,2%" 
    set "Min=%dt:~10,2%" 
    set "Sec=%dt:~12,2%" 

    rem Remove padding from date elements and increase day 
    set /a "y=%YYYY%", "m=100%MM% %% 100", "d=(100%DD% %% 100)+1" 
    rem Calculate month length 
    set /a "ml=30+((m+m/8) %% 2)" & if %m% equ 2 set /a "ml=ml-2+(3-y %% 4)/3-(99-y %% 100)/99+(399-y %% 400)/399" 
    rem Adjust day/month/year for tomorrow date 
    if %d% gtr %ml% set /a "d=1", "m=(m %% 12)+1", "y+=(%m%/12)" 

    rem Pad date elements and translate again to original variables 
    set /a "m+=100", "d+=100" 
    set "YYYY=%y%" 
    set "YY=%y:~-2%" 
    set "MM=%m:~-2%" 
    set "DD=%d:~-2%" 

    echo Tomorrow: %YYYY%/%MM%/%DD% 

只需添加文件夾創建按規定格式

+0

謝謝!完美的作品 – tim 2014-12-02 18:07:17

0

批次與日期數學繁瑣。閏年,月/年變化/等可能是一個痛苦的處理。我建議使用JScript Date()對象,其中所有這些轉換都是自動處理的。

如下是批處理/ JScript混合腳本。使用.bat擴展名將其保存並按照用於運行典型批處理腳本的方式運行它。

@if (@[email protected]) @end /* JScript ignores this multiline comment 

:: batch portion 

@echo off 
setlocal 

for /f "tokens=1-3" %%I in ('cscript /nologo /e:JScript "%~f0"') do (
    set "MM=%%I" 
    set "DD=%%J" 
    set "YYYY=%%K" 
) 

xcopy /d:%MM%-%DD%-%YYYY% /l . .. >nul 2>&1 || goto loop 

echo %MM%/%DD%/%YYYY% 
mkdir "%userprofile%\Desktop\%MM%%DD%%YYYY:~-2%\" 

pause 

goto :EOF 

:: end batch portion/begin JScript */ 

function zeroPad(what) { return (what+'').length < 2 ? '0'+what : what; } 

var tomorrow = new Date(); 
tomorrow.setDate(tomorrow.getDate() + 1); 

WSH.Echo([ 
    zeroPad(tomorrow.getMonth() + 1), 
    zeroPad(tomorrow.getDate()), 
    tomorrow.getFullYear() 
].join(' ')); 
相關問題