Batch file Windows批处理文件,用于为输入的年份中的每个日期创建文件夹,并支持闰年

Batch file Windows批处理文件,用于为输入的年份中的每个日期创建文件夹,并支持闰年,batch-file,Batch File,我正在尝试制作一个批处理脚本,为输入年份的每个日期创建文件夹,并让它知道何时输入闰年。我不知道如何创造IF条件,以便任何人都能帮助我。谢谢 @ECHO off ECHO ### Date Folder Generator: Started! ### SET /p year=### Enter Year [e.g. 2014]: SET year=%year:,=% MKDIR %year% CD %year% FOR %%G IN (01_January 02_February 03_March

我正在尝试制作一个批处理脚本,为输入年份的每个日期创建文件夹,并让它知道何时输入闰年。我不知道如何创造IF条件,以便任何人都能帮助我。谢谢

@ECHO off
ECHO ### Date Folder Generator: Started! ###
SET /p year=### Enter Year [e.g. 2014]:
SET year=%year:,=%
MKDIR %year%
CD %year%
FOR %%G IN (01_January 02_February 03_March 04_April 05_May 06_June 07_July 08_August 09_September 10_October 11_November 12_December) DO MKDIR %%G
CD 01_January
FOR /L %%G IN (1,1,31) DO MKDIR %%G-Jan-%year%
CD ..
CD 02_February
FOR /L %%G IN (1,1,28) DO MKDIR %%G-Feb-%year%
CD ..
CD 03_March
FOR /L %%G IN (1,1,31) DO MKDIR %%G-Mar-%year%
CD ..
CD 04_April
FOR /L %%G IN (1,1,30) DO MKDIR %%G-Apr-%year%
CD ..
CD 05_May
FOR /L %%G IN (1,1,31) DO MKDIR %%G-May-%year%
CD ..
CD 06_June
FOR /L %%G IN (1,1,30) DO MKDIR %%G-Jun-%year%
CD ..
CD 07_July
FOR /L %%G IN (1,1,31) DO MKDIR %%G-Jul-%year%
CD ..
CD 08_August
FOR /L %%G IN (1,1,31) DO MKDIR %%G-Aug-%year%
CD ..
CD 09_September
FOR /L %%G IN (1,1,30) DO MKDIR %%G-Sep-%year%
CD ..
CD 10_October
FOR /L %%G IN (1,1,31) DO MKDIR %%G-Oct-%year%
CD ..
CD 11_November
FOR /L %%G IN (1,1,30) DO MKDIR %%G-Nov-%year%
CD ..
CD 12_December
FOR /L %%G IN (1,1,31) DO MKDIR %%G-Dec-%year%
CD ..
CD ..
ECHO ### Leap Years: 2016 2020 2024 2028 2032 2036 2040 2044 2048 2052 2056 2060 2064 2068 2072 2076 2080 2084 2088 2092 2096 2104 2108 2112 2116 2120 2124 2128 2132 2136 2140 2144 2148 2152 2156 2160 2164 2168 2172 2176 2180 2184 2188 2192 2196 2204 2208 2212 2216 2220 2224 2228 2232 2236 2240 2244 2248 2252 2256 2260 2264 2268 2272 2276 2280 2284 2288 2292 2296 2304 2308 2312 2316 2320 2324 2328 2332 2336 2340 2344 2348 2352 2356 2360 2364 2368 2372 2376 2380 2384 2388 2392 2396 2400
ECHO ### Date Folder Generator: Finished! ###  
如果可以改进FOR循环以避免一些代码重复,那也很酷。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
设置“sourcedir=U:\年”
设置/p年份=###输入年份[例如2014年]:
如果未定义年份转到:EOF
设置年份=%year:,=%
如果%year%lss 100台/年=2000+年
如果%year%gtr 1901如果%year%lss 2099转到生成
输入的回声年超出范围1901到2099
后藤:eof
:生成
MD“%sourcedir%”
设置/a二月=年份%%4
如果%feb%==0(设置为“feb=02,2月29日”)否则(设置为“feb=02,2月28日”)
PUSHD“%sourcedir%”
MKDIR%年%
CD%年%
对于%%a(01,一月,31日,三月,31日,04年4月,30日,05年5月,31日,06年6月,30日,07年7月,31日,08年8月,31日,09年9月,30日,10月,31日,11月,30日,12月,31日),请执行以下操作(
对于/f“令牌=1-3delims=,”%%b IN(%%a)DO(
设置“月=%%c”
设置“月=!月:~0,3!”
MKDIR%%b_uu%%c
pushd%%b_uuC%%
对于(1,1,%%d)中的/l%%q,执行MD%%q-!月!-%年%
邻苯二胺
)
)
邻苯二胺
后藤:EOF
您需要更改
sourcedir
的设置以适应您的环境

输入年份处理不是防弹的,但这不是练习的目标。

@echo off
setlocal enableextensions enabledelayedexpansion
rem输入和验证年份
设置/p“年份=输入年份(yyyy):”| |转到:eof
设置“year=%year:=%”和rem
对于/f“delims=0123456789”%%a in(“%year%”)的do回显错误:错误数据和转到:eof
如果“%year:~3,1%”==“回显错误:太短&goto:eof
如果不是“%year:~4%”,则返回错误:太长(&goto:eof)
对于%%f英寸(
01年1月02日2月03日3月04日4月
05月06日6月07日7月08日8月
09年9月10日10月11日11月12日12月
)do for/f“标记=1,2 delims=“%%m in(“%%f”)do(
rem准备文字
设置“monthName=%%n”
设置“monthShortName=!monthName:~0,3!”
rem计算当月天数并调整闰年
设置/a“月=1%%m%%100”
设置/a“天数=30+((月+月/8)%%2)”
如果%%m==02套/a“天=天-2+(3年%%4)/3-(99年%%100)/99+(399年%%400)/399”
rem文件夹创建
对于/l%%d(1!天!),请执行以下操作(
设置“dd=0%%d”
md%year%\%f\!dd:~-2!-!monthShortName!-%year%2>nul
)
)
几点

  • 我已经包括了一个非常基本的年度验证
  • 在您提问之前,
    rem“
    只是为了让语法突出显示按预期工作,因为代码中有一个奇怪的引号
  • 月份长度是针对所有月份计算的,而不仅仅是二月

我喜欢Magoo和MC ND的答案——它们应该非常快

有一个非常简单的解决方案,使用它可以执行日期算术和格式化操作。这是一个纯脚本,可以在XP以后的任何Windows计算机上运行。完整的文档嵌入在getTimestamp.bat中

此解决方案的一个缺点是,由于每次迭代启动Windows脚本主机(WSH)的开销,它的速度相对较慢

我会回显每个创建的文件夹,以便您可以跟踪进度

下面的脚本要求将年份作为
%1
参数输入,而不是使用SET/p提示输入年份

@echo off
setlocal enableDelayedExpansion
for /l %%N in (0 1 365) do (
  call getTimestamp -d "'1/1/%~1'" -od %%N -f "{yyyy}\{mm}_{month}\{dd}-{mth}-{yyyy}" -r dt || exit /b
  if "!dt:~-4!" neq "%~1" exit /b
  md "!dt!"
  echo !dt!
)
再来一个

@echo off
setlocal EnableDelayedExpansion

rem Input and validate year
set /P "input=Enter Year [e.g. 2014]: "
set "year="
set /A year=%input:,=%, yearMOD4=year %% 4 2>NUL
if defined year if !year! geq 2014 if !year! lss 2099 goto continue
echo Error: Bad data
goto :EOF

:continue
rem Generate arrays with month names and number of days
set i=100
for %%a in (January@31 February@28 March@31     April@30   May@31      June@30
            July@31    August@31   September@30 October@31 November@30 December@31) do (
   set /A i+=1
   for /F "tokens=1,2 delims=@" %%b in ("%%a") do (
      set "month[!i:~-2!]=%%b"
      set "days[!i:~-2!]=%%c"
   )
)
if %yearMOD4% equ 0 set days[02]=29

rem Generate the folders
md %year%
cd %year%
for /F "tokens=2,3 delims=[]=" %%a in ('set month[') do (
   md %%a_%%b
   for /L %%d in (1,1,!days[%%a]!) do md %%a_%%b\%%d-!month[%%a]:~0,3!-%year%
)

编辑-Oops,忘记包含getTimestamp的链接。所有问题都已修复。