批处理命令 - 在文件夹末尾添加日期

时间:2014-12-02 16:47:40

标签: date batch-file

我目前运行批处理命令在高级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

2 个答案:

答案 0 :(得分: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%

只需以所需格式添加文件夹

即可

答案 1 :(得分:0)

使用日期数学批处理很麻烦。闰年,月/年变化/等可能是一个痛苦的处理。我建议使用JScript Date()对象,其中所有此类转换都会自动处理。

以下是批处理/ JScript混合脚本。使用.bat扩展名保存并运行它,因为您习惯于运行典型的批处理脚本。

@if (@a==@b) @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(' '));