批处理FOR循环中文件修改时间变量无法正确更新问题
问题解决方法
你的问题出在两个核心点:批处理的变量扩展机制,以及set命令的语法错误。
修改后的代码
@echo off setlocal enabledelayedexpansion for /f %%a in ('dir /b .\*.*') do ( echo a : %%a echo ta: %%~ta set filetime=%%~ta echo filetime: !filetime! ) endlocal
关键修改说明
- 开启延迟变量扩展:添加
setlocal enabledelayedexpansion。批处理默认是即时变量扩展,循环内的%filetime%会在整个循环执行前就被替换成变量的初始旧值。开启延迟扩展后,用!filetime!可以在每次循环迭代时实时读取变量的当前值。 - 修正
set命令的空格:原代码set filetime = %%~ta中,等号两边的空格会被识别为变量名和值的一部分,实际定义的变量是filetime(带末尾空格),而你调用的是不带空格的%filetime%,自然读不到正确值。必须写成set filetime=%%~ta(等号两边无空格)。
修改后运行脚本,每个文件对应的filetime会正确显示该文件的实际修改时间。
内容的提问来源于stack exchange,提问作者Javier Perez
相关产品推荐
相关产品推荐

