bat 批处理查看文件年龄
批处理脚本功能
计算当前日期与随机选取文件的创建日期之间的相隔天数,支持跨年、闰年、大小月判断。
流程图解析
关键代码详解
1. 随机选取文件
for /f "tokens=1* delims=:" %%i in ('dir /b *.*^|findstr /n .*') do set var=%%i
set /a w=%random%%%%var%+1
for /f "tokens=1* delims=:" %%i in ('dir /b *.*^|findstr /n .*') do (if "%%i"=="%w%" set wjm=%%j&goto lis
)
- 作用:通过
dir /b
列出文件,用findstr /n
添加行号,通过%random%
随机选择文件路径。 - 关键点:
^|
是管道符转义,%%i
为行号,%%j
为文件名。
2. 提取文件创建日期
for /f "skip=4 tokens=1* delims= " %%a in ('dir/c "%wjm%"') do set wjrq=%%a&goto _lis
- 作用:
dir/c
显示文件详细信息,跳过前4行无用信息,提取日期部分%%a
。 - 关键点:
skip=4
跳过头部信息,tokens=1*
获取第一列(日期)。
3. 去除日期前导0
if "%wy:~0,1%" equ "0" set wy=%wy:~1%
- 作用:使用字符串截取
%var:~n,m%
去除月份和日期的前导零。 - 示例:若
wy=03
,处理后变为3
。
4. 日期比较与排序
if %wjrq% lss %xtrq% (set b=%xt1%&set a=%wj%) else (set b=%wj%&set a=%xt1%)
- 作用:通过
lss
(小于)比较文件日期与系统日期,确保a
为较早日期,b
为较晚日期。
5. 天数递减核心逻辑
:kkk
set/a bri-=1
set/a tian+=1
if "%bri%"=="0" call :_yue
- 作用:从较晚日期逐天递减,直到与较早日期相等。
- 关键点:
bri
(日)减到0时调用:_yue
处理月份切换。
6. 闰年判断
:run
set /a _a=%bnian%/4
set /a _b=%_a%*4
if "%_b%"=="%bnian%" (call :run1) else set ru=0
- 作用:通过能否被4、100、400整除判断闰年。
- 逻辑:能被4整除但不能被100整除,或能被400整除则为闰年。
7. 月份切换处理
:_yue
if "%byue%"=="1" (set/a bnian-=1&set byue=12) else set /a byue-=1
if "%byue%"=="2" (call :run) else goto :eof
- 作用:处理月份递减,1月变12月,其他月份减1。
- 关键点:二月调用闰年判断,设置28或29天。
使用方法
- 将脚本保存为
.bat
文件,放入目标文件夹。 - 双击运行,自动计算随机文件的创建天数差。
- 按任意键重新随机选取文件。
输出示例:
创建日期 2023-02-15 文件名 example.txt
当前日期 2024-03-20
文件 example.txt 创建日期和当前日期相隔 399 天
注意事项
- 环境依赖:仅适用于Windows系统,日期格式需为
YYYY-MM-DD
。 - 闰年逻辑:严格遵循Gregorian历法规则。
- 文件日期:依赖系统记录的创建日期,非修改日期。