【发布时间】:2022-01-11 15:51:19
【问题描述】:
我想编辑以下批处理代码,以便在一年中的每个工作日创建一个文件夹并跳过星期六和星期日(我想它应该连续创建 5 天并跳过接下来的 2 天) 我也希望批处理文件
- 跳过为每个月创建文件夹(一月文件夹、二月文件夹等),并将一年中的所有日子都放在同一个文件夹中。
- 在每天的文件夹中添加两个额外的文件夹,分别是“早上”和“下午”
例如:
C:\Users\alex\Desktop\2022\1 Jan\Morning
C:\Users\alex\Desktop\2022\1 Jan\Afternoon
一直到
C:\Users\alex\Desktop\2022\31 Dec\Morning
C:\Users\alex\Desktop\2022\31 Dec\Afternoon
(它不会创建 31 dec 文件夹,因为那是星期六)
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\years"
SET /p year=### Enter Year [e.g. 2014]:
IF NOT DEFINED year GOTO :EOF
SET year=%year:,=%
IF %year% lss 100 SET /a year=2000+year
IF %year% gtr 1901 IF %year% lss 2099 GOTO generate
ECHO year entered out of range 1901..2099
GOTO :eof
:generate
MD "%sourcedir%"
SET /a feb=year %% 4
IF %feb%==0 (SET "feb=02,February,29") ELSE (SET "feb=02,February,28")
PUSHD "%sourcedir%"
MKDIR %year%
CD %year%
FOR %%a IN ("01,January,31" "%feb%" "03,March,31" "04,April,30" "05,May,31" "06,June,30" "07,July,31" "08,August,31" "09,September,30" "10,October,31" "11,November,30" "12,December,31") DO (
FOR /f "tokens=1-3delims=," %%b IN (%%a) DO (
SET "month=%%c"
SET "month=!month:~0,3!"
MKDIR %%b_%%c
pushd %%b_%%c
FOR /l %%q IN (1,1,%%d) DO MD %%q-!month!-%year%
popd
)
)
popd
GOTO :EOF
【问题讨论】:
-
银行/公共假期怎么样,通常也不是“工作日”。如果您只对工作日感兴趣,即一周中不包括周末的日子,那么最好这样说,而不会增加使用“工作”一词的混淆。顺便说一句,我强烈建议您不要考虑仅使用批处理文件执行此任务,请获得 PowerShell 或其他支持日期对象的实用程序的帮助。
-
如果您想要一个纯粹的
batch-file解决方案,Ritchie Lawrence 的许多脚本都可以满足您的需求。您需要的大部分代码都在这个Q&A 中。他用数字 1 到 7 设置星期几。但不确定 1 是代表星期日还是星期一。
标签: batch-file