找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 10990|回复: 3

[日期时间] 批处理建立目录,无法正常运行

[复制链接]
发表于 2024-10-1 12:07:53 | 显示全部楼层 |阅读模式
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. :: 提示用户输入月份
  4. echo 请输入月份数字(1-12):
  5. set /p month_input=

  6. :: 检查输入是否合法
  7. if not defined month_input (
  8.     echo 请输入有效的月份数字(1-12)!
  9.     exit /b
  10. )

  11. if !month_input! lss 1 (
  12.     echo 请输入有效的月份数字(1-12)!
  13.     exit /b
  14. )

  15. if !month_input! gtr 12 (
  16.     echo 请输入有效的月份数字(1-12)!
  17.     exit /b
  18. )


  19. :: 设置月份变量
  20. set month_num=!month_input!
  21. set month_str=!month_num!


  22. :: 如果月份小于 10,则前面加 0
  23. if !month_num! lss 10 (
  24.     set month_str=0!month_num!
  25. )


  26. :: 获取当前年份
  27. for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do (
  28.     set datetime=%%a
  29. )
  30. set year=%datetime:~0,4%


  31. :: 判断是否为闰年
  32. set is_leap_year=0
  33. if !year! %% 400 equ 0 (
  34.     set is_leap_year=1
  35. ) else if !year! %% 100 neq 0 (
  36.     if !year! %% 4 equ 0 (
  37.         set is_leap_year=1
  38.     )
  39. )

  40. pause
  41. :: 根据用户输入的月份创建对应的目录
  42. set main_dir=!year!年!month_str!月
  43. md "!main_dir!" >nul 2>nul

  44. pause
  45. :: 根据月份创建子目录
  46. if !month_num! equ 2 (
  47.     if !is_leap_year! equ 1 (
  48.         for /l %%d in (1,1,29) do (
  49.             set day=%%d
  50.             if %%d lss 10 set day=0%%d
  51.             md "!main_dir!\%%day%日" >nul 2>nul
  52.         )
  53.     ) else (
  54.         for /l %%d in (1,1,28) do (
  55.             set day=%%d
  56.             if %%d lss 10 set day=0%%d
  57.             md "!main_dir!\%%day%日" >nul 2>nul
  58.         )
  59.     )
  60. ) else if !month_num! equ 4 (
  61.     for /l %%d in (1,1,30) do (
  62.         set day=%%d
  63.         if %%d lss 10 set day=0%%d
  64.         md "!main_dir!\%%day%日" >nul 2>nul
  65.     )
  66. ) else if !month_num! equ 6 (
  67.     for /l %%d in (1,1,30) do (
  68.         set day=%%d
  69.         if %%d lss 10 set day=0%%d
  70.         md "!main_dir!\%%day%日" >nul 2>nul
  71.     )
  72. ) else if !month_num! equ 9 (
  73.     for /l %%d in (1,1,30) do (
  74.         set day=%%d
  75.         if %%d lss 10 set day=0%%d
  76.         md "!main_dir!\%%day%日" >nul 2>nul
  77.     )
  78. ) else if !month_num! equ 11 (
  79.     for /l %%d in (1,1,30) do (
  80.         set day=%%d
  81.         if %%d lss 10 set day=0%%d
  82.         md "!main_dir!\%%day%日" >nul 2>nul
  83.     )
  84. ) else (
  85.     for /l %%d in (1,1,31) do (
  86.         set day=%%d
  87.         if %%d lss 10 set day=0%%d
  88.         md "!main_dir!\%%day%日" >nul 2>nul
  89.     )
  90. )

  91. echo Folder created.

  92. :: 复制文件到对应月份的目录
  93. copy "%CD%\1.xlsx" "!main_dir!\" >nul 2>nul

  94. exit /b
复制代码
无法运行,提示:
请输入月份数字(1-12):
1
此时不应有 %。
发表于 2024-10-1 13:01:29 | 显示全部楼层
  1. :: 判断是否为闰年
  2. set is_leap_year=0
  3. if !year! %% 400 equ 0 (
复制代码

需要先用 set /a 计算,再比较

  1. md "!main_dir!\%%day%日"
复制代码

应为
  1. md "!main_dir!\!day!日"
复制代码
发表于 2024-10-1 13:13:26 | 显示全部楼层
相关方法 http://bbs.bathome.net/viewthread.php?tid=69590
  1. @echo off
  2. rem 保存为ansi
  3. for /f %%a in ('wmic os get localdatetime ^|findstr [0-9]') do set year=%%a&call set year=%%year:~0,4%%
  4. set/a num=!(year%%4) ^& !(!(year%%100)) ^| !(year%%400),_2=28+num,_1=_3=_5=_7=_8=_10=_12=31,_4=_6=_9=_11=30
  5. :re
  6. set /p m=input:
  7. setlocal enabledelayedexpansion
  8. if not defined _!m! (
  9.         echo 请输入有效的月份数字(1-12)!
  10.         endlocal
  11.         set m=
  12.         goto :re
  13. )
  14. set "#m=0!m!"
  15. for /l %%l in (1,1,!_%m%!) do (
  16.         set l=0%%l
  17.         md "%year%年!#m:~-2!月\!l:~-2!日"
  18. )
  19. copy "%CD%\1.xlsx" "%year%年!#m:~-2!月"
  20. endlocal
  21. pause
复制代码
发表于 2024-10-2 10:20:58 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-10-2 10:42 编辑

回复 1# zhlgx

一楼代码存在变量引用等错误,现重写一个简化版本如下...
主要包含几个处理步骤:检查输入月值的合理性;平闰年2月份天数选择值;大小月份天数选择值;月日值补零占位处理...

  1. @echo off &setlocal enabledelayedexpansion
  2. choice /c 123456789abc /n /m "指定一个月份值 [1,2,3,4,5,6,7,8,9,a,b,c] 其中 a=10,b=11,c=12:"
  3. if !errorlevel! equ 0 (exit/b) else set "m=!errorlevel!"
  4. set "m30=4,6,9,11," &set/a "y=%date:~,4%,r=y%%4"
  5. if !m! equ 2 (set "days=28" &if !r! equ 0 set "days=29") else (
  6.         if "!m30:%m%=!"=="!m30!" (set "days=31") else set "days=30")
  7. if !m! leq 9 (set mm=0!m!) else (set mm=!m!)
  8. for /l %%n in (1,1,!days!) do (if %%n leq 9 (md "!y!年!mm!月\0%%n日") else md "!y!年!mm!月\%%n日") 2>nul
  9. endlocal&pause&exit/b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 19:02 , Processed in 0.017725 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表