如何修改批量移动文件的批处理脚本,使其保留当日文件仅移动指定日期前的文件?
如何修改批量移动文件的批处理脚本,使其保留当日文件仅移动指定日期前的文件?
嗨,这个需求很实用,咱们直接用Windows自带的forfiles命令就能搞定——它专门用来按日期筛选文件,完美解决你要保留当日文件、只移动历史文件的问题。
之前你的脚本用move直接转移所有文件,现在咱们加个筛选条件就行。下面是修改后的完整脚本,我会一步步给你解释:
@echo off set "source=M:\systems\main\data\panelData\current" set "dest=M:\systems\main\data\panelData\archive" :: 确保归档文件夹存在,不存在则自动创建(避免移动时报错) mkdir "%dest%" 2>nul :: 筛选并移动所有修改日期早于今日的文件 forfiles /p "%source%" /m *.* /d -1 /c "cmd /c move @path \"%dest%\""
关键参数说明:
/p "%source%":指定要操作的源文件夹(就是你说的current文件夹)/m *.*:匹配所有类型的文件,和你原来的逻辑一致/d -1:核心筛选条件——选择最后修改日期早于当前日期1天前的文件,也就是昨天及更早的文件,刚好保留当天的文件不动/c "cmd /c move @path \"%dest%\"":对每一个筛选出来的文件执行move命令,@path会自动替换为当前文件的完整路径,转义双引号是为了处理带空格的路径(如果你的路径没空格也可以不用,但加上更稳妥)
测试小技巧:
如果你担心误操作,可以先改成测试模式,脚本只会输出要移动的文件路径,不会真的执行移动:
@echo off set "source=M:\systems\main\data\panelData\current" set "dest=M:\systems\main\data\panelData\archive" :: 测试模式:仅打印待移动的文件路径 forfiles /p "%source%" /m *.* /d -1 /c "cmd /c echo 待移动文件:@path"
确认输出的文件都是你想要移动的,再改回正式的move命令就好啦。
备注:内容来源于stack exchange,提问作者Matias Squartini
相关产品推荐
相关产品推荐

