中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-22 21:53
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何将目录A存取时间超过30天的档案,move到B目录 查看 1,135 回复 5
楼 主 [求助]如何将目录A存取时间超过30天的档案,move到B目录 发表于 2010-07-07 07:43 ·  中国 台湾 台湾宽频通讯顾问股份有限公司
初级用户
★★
积分 68
发帖 64
注册 2009-05-23 20:43
17年会员
UID 145803
性别 男
状态 离线
如何将目录A(含子目录与档案),存取时间超过30天的档案,move到B目录,B目录仍需有与A相同的子目录结构,原A子目录架构仍保留。
搜索讨论区仍没找到解答
http://www.cn-dos.net/forum/viewthread.php?tid=49265&fpage=1&highlight=move
2 发表于 2010-07-10 06:17 ·  中国 台湾 台湾宽频通讯顾问股份有限公司
初级用户
★★
积分 68
发帖 64
注册 2009-05-23 20:43
17年会员
UID 145803
性别 男
状态 离线
请大家帮帮忙 ! 谢谢!
3 帮你顶起来,围观你 发表于 2010-07-12 11:30 ·  中国 上海 电信
初级用户
积分 110
发帖 45
注册 2007-01-07 00:00
19年会员
UID 75756
性别 男
状态 离线
这种帖子应该很多的,你在论坛仔细搜搜,肯定有。。。。。
我不当老大谁当老大。。。
4 发表于 2010-07-13 05:21 ·  中国 台湾 台湾宽频通讯顾问股份有限公司
初级用户
★★
积分 68
发帖 64
注册 2009-05-23 20:43
17年会员
UID 145803
性别 男
状态 离线
(1) 以下是我测试的code , 初步测试可行,但须第三方
(2) 请各位可否精简,不要暂存档,谢谢 !



del 2.bat
del 3.bat
call robocopy-01.bat
call move-01.bat >> 2.bat
call change01.bat
call rep-string02.bat
ping 127.1 -n 3 > nul
start 3.bat


robocopy-01.bat (复制目录架构,不含档案,robocopy是微软工具 ) :

robocopy d:\temp02 D:\Temp1\test\test99 /e /lev:50 /minage:19000101

move-01.bat (修改cn-dos的 delete sample 为move):


@echo off
::演示:echo move 指定路径下指定天数之前(以档的最后修改日期为准)的档。
::如果演示结果无误,把move前面的echo去掉,即可实现真正删除。
::本例调用了临时VBS代码进行日期计算,并统一设置系统日期格式,处理完毕
::之后再把日期格式恢复成原来的状态。摆脱了对reg命令(XP系统自带)的依赖。

rem 指定待move文件的存放路径
set SrcDir=D:\temp02
rem 指定天数
set DaysAgo=30
>"%temp%\BackupDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%\BackupDate.vbs" echo WScript.Echo WshShell.RegRead ("HKEY_CURRENT_USER\Control Panel\International\sShortDate")
for /f %%a in ('cscript /nologo "%temp%\BackupDate.vbs"') do (
set "RegDateOld=%%a"
)
>"%temp%\UnifyDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%\UnifyDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "yyyy-M-d", "REG_SZ"
cscript /nologo "%temp%\UnifyDate.vbs"
>"%temp%\DstDate.vbs" echo LastDate=date()-%DaysAgo%
>>"%temp%\DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%\DstDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
set "DstDate=%%a"
)
set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
for /r "%SrcDir%" %%a in (*.*) do (
if "%%~ta" leq "%DstDate%" (
if exist "%%a" (
echo move "%%a" "%%a"
)
)
)
>"%temp%\RecoverDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%\RecoverDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "%RegDateOld%", "REG_SZ"
cscript /nologo "%temp%\RecoverDate.vbs"


change01.bat (change为第三方工具):

change 2.bat /from " /to ☆

rep-string02.bat (replace ☆ to "):

@echo off
setlocal enabledelayedexpansion
for /f "usebackq tokens=1,2,3,4 delims=☆" %%a in (2.bat) do (
set str=%%d
REM set str=!str:D:\temp02=D:\Temp1
set str=!str:D:\temp02=D:\Temp1\test\test99!
echo %%a "^%%b" "!str!" >>3.bat
)


[ Last edited by pdanniel66 on 2010-7-13 at 05:29 ]
5 发表于 2010-07-13 17:01 ·  中国 北京 联通
新手上路
积分 2
发帖 2
注册 2010-07-12 20:46
15年会员
UID 170475
性别 男
状态 离线
我也很想知道,使用批处理怎么自动判断文件更改时间?
6 Re 5 楼 发表于 2010-07-14 09:54 ·  新加坡
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
参考:批处理删除指定天数日期之前的文件
http://bbs.bathome.net/thread-3334-1-1.html
论坛跳转: