中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-11 07:49
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]按文件的修改日期进行备份的批处理 查看 965 回复 5
楼 主 [已结]按文件的修改日期进行备份的批处理 发表于 2009-02-10 16:28 ·  中国 广东 东莞 电信
新手上路
积分 4
发帖 3
注册 2008-12-11 08:55
17年会员
UID 133500
性别 男
状态 离线
将D盘DATA下所有最近两天修改的文件,COPY到E盘一个以当天日期命名的目录中

已知:

1、新建一个以当前日期命名的目录
mkdir E:\%date:~0,10%

2、将D盘DATA下所有最近两天修改的文件COPY到新建的目录中

????请教各位DOS高手,如何判断哪些文件是最近两天修改过的文件???

????如何将这些文件COPY到新建的目录中???

[ Last edited by HAT on 2009-2-10 at 22:26 ]
2 发表于 2009-02-10 17:08 ·  中国 北京 鹏博士长城宽带
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
datex 计算日期
直接用RAR 命令打包最省事

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
3 发表于 2009-02-10 18:27 ·  美国 华盛顿州 金 雷德蒙德 Microsoft
初级用户
★★
积分 100
发帖 93
注册 2009-01-14 15:04
17年会员
UID 136661
性别 男
来自 湖南
状态 离线
讲一下思路
1. dir /a /s /o-d "d:\data">>test.txt ::将data文件夹下面的文件及子文件夹信息全部保存到test.txt文件

2. findstr "[0-9]*\/[0-9]*\/[0-9]*" test.txt>>a.txt ::将带有日期格式的行存入a.txt文件

3. for /f "delims=" %%i in (a.txt) do (
for /f "tokens=4 delims= " %%j in ("%%i") do (
if "%%j" NEQ "<DIR>" echo %%i>>test1.txt
)
)
::这里就是将a.txt里面包含文件的行取出来,去除一些不是文件的或文件夹。

4. 在test1.txt里面取日期格式,**/**/****,然后调用比较日期的bat函数,这个好像函数库里面有。去查查吧。
4 发表于 2009-02-10 20:58 ·  中国 广东 东莞 电信
新手上路
积分 4
发帖 3
注册 2008-12-11 08:55
17年会员
UID 133500
性别 男
状态 离线
Originally posted by yishanju at 2009-2-10 17:08:
datex 计算日期
直接用RAR 命令打包最省事





非常感谢2楼的热心朋友!谢谢!用RAR命令打包真的很省事,可是其中的目录好像打包不了,只能打包文件。


5 发表于 2009-02-10 21:47 ·  中国 广东 东莞 电信
新手上路
积分 4
发帖 3
注册 2008-12-11 08:55
17年会员
UID 133500
性别 男
状态 离线
rar a -r -ta%date% %date% d:\


搞定了!
6 来个纯批的 发表于 2009-02-10 22:32 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
刚写好,贴子就结了。还是帖出来吧,留着没用

@echo off
::转存d:\data\前两修改的文件到e:\aa\今天日期为名的目录,
::如果目标目录不存在则自动新建。
set date=
set ms= 31 28 31 30 31 30 31 31 30 31 30 31
set/a d=1%date:~8,2%-102,m=1%date:~5,2%-100,y=%date:~0,4%
set/a vy=y%%4,vm=(m+10)%%12*3
if %vy%==0 set ms=%ms:28=29%
call set vm=%%ms:~%vm%,3%%
if %d% lss 1 set /a d=d+vm,m-=1
if %m% lss 1 set /a m=m+12,y-=1
if %m% lss 10 set m=0%m%
if %d% lss 10 set d=0%d%
set date-2=%y%-%m%-%d%
::上面取得前两天的日期
::bat 处理日期太麻烦了!涉及到月份不同,和闰年问题。

for %%a in (d:\data\*.*) do if %%~ta geq %date-2% xcopy /y %%a E:\aa\%date:~0,10%\
精简
=> 个人网志
论坛跳转: