我必须使用cmd将我的最新文件单独移动到名为'archive'的文件夹中。我应该这样做吗?
例如:我的文件是在my_folder中的may,june,7月,aug和sep中创建的。
现在我需要将在may,june,7月和aug中创建的所有文件移动到my_archive中,并且单独的sep文件必须保留在my_folder中。
我使用了移动c:\ my_folder *。* c:\ my_archive。但这会移动所有文件。这样做的正确脚本应该是什么?
第二件事是,我正在考虑使用任务调度程序来运行具有此移动脚本的批处理文件?这会有帮助吗?
谢谢,
ResKing
答案 0 :(得分:0)
假设您的日期格式为MM / dd / yyyy,这可能有效:
@echo off
set month=%date:~0,2%
set year=%date:~-4%
mkdir temp_folder
rem move this month's files out of the way
forfiles /d +%month%/01/%year% /c "%comspec% /c move \"@path\" temp_folder"
rem move all other files to my_archive
forfiles /d -%month%/01/%year% /c "%comspec% /c move \"@path\" my_archive"
rem restore this month's files
move temp_folder\*.* .
rmdir temp_folder
答案 1 :(得分:0)
此批处理将遍历所有旧文件(不是从当前月份)并逐个移动到my_archive目录。
我正在创建一个新文件,以防此目录中没有新文件(我使用新文件作为循环的中断规则)。该文件将在批处理文件的末尾删除。
dir参数仅显示文件并按日期排序。您还可以指定您喜欢的时间戳:
/T:C - Creation
/T:A - Last Access
/T:W - Last Written
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET SRC_PATH=c:\my_folder
SET DST_PATH=c:\my_archive
SET MONTH=%date:~4,2%
SET YEAR=%date:~-4%
echo blah > !SRC_PATH!\to_delete.txt
for /f "skip=4 tokens=1,5 delims= " %%g in ('dir /A:-D /O:D !SRC_PATH!') do (
set date=%%g
set m=!date:~0,2!
set y=!date:~-4!
if !YEAR! gtr !y! (move !SRC_PATH!\%%h !DST_PATH!\%%h) else (
if !MONTH! gtr !m! (move !SRC_PATH!\%%h !DST_PATH!\%%h) else goto :end
) )
:end
del !SRC_PATH!\to_delete.txt