中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-29 09:21
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求助,无论目标文件是新还是旧,只要和源文件不同就复制 查看 1,611 回复 20
楼 主 求助,无论目标文件是新还是旧,只要和源文件不同就复制 发表于 2007-12-09 11:35 ·  中国 浙江 杭州 萧山区 电信
初级用户
★★
积分 172
发帖 77
注册 2006-11-23 15:05
19年会员
UID 71489
性别 男
状态 离线
求助,无论目标文件是新还是旧,只要和源文件不同就复制的BAT


比如A目录中的EXE文件去比较B目录中的EXE文件,如果B目录中的文件和A目录中的文件不同就复制,
2 发表于 2007-12-09 12:39 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
简单效率较高的代码
@echo off
for /r a\ %%i in (*.exe) do (
for /r a\ %%a in (%%~nxi) do (
for /r b\ %%b in (%%~nxi) do (
if not "%%~za"=="%%~zb" echo %%a 不同于 %%b
)
)
)
pause


也能处理空格和系统属性文件的代码
@echo off
for /f "tokens=*" %%i in ('dir /s/b/a-d a\*.exe') do (
for /f "tokens=*" %%a in ('dir /s/b/a-d "a\%%~nxi"') do (
for /f "tokens=*" %%b in ('dir /s/b/a-d "b\%%~nxi"') do (
if not "%%~za"=="%%~zb" echo "%%a" 不同于 "%%b"
)
)
)
pause
第一高手 第二高手

3 发表于 2007-12-09 12:44 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
哦补充一点除了用if not "%%~za"=="%%~zb"以外还可以用
if not "%%~ta"=="%%~tb"
预知详情请看for /?
第一高手 第二高手

4 发表于 2007-12-09 12:53 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
这个问题似乎没这么复杂吧?
xcopy 的 /d 参数好像就有这个功能
致精致简!
5 发表于 2007-12-09 13:20 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
是的但叫楼主如何去用xcopy还不如直接给他代码,扫盲难~,上面还没加copy参数,就怕回头楼主说判断出来了就是没有复制,总之什么都有可能,类似帖子回怕了~所以我3楼注明了预知详情请看for /?
第一高手 第二高手

6 发表于 2007-12-09 13:33 ·  中国 浙江 杭州 萧山区 电信
初级用户
★★
积分 172
发帖 77
注册 2006-11-23 15:05
19年会员
UID 71489
性别 男
状态 离线
xcopy 的 /d 参数只能检测源文件比目标文件新的时候才会复制,如果目标文件比源文件新是无法复制的,我的想法是因为病毒会感染目标文件,往往被改动过的文件比源文件要新,如果被改动,我就复制原始文件到目标,以使程序能正常运行

3楼的程序我用了一下,不过我是这样改过的
@echo off
for /r xw\ %%i in (*.exe) do (
for /r xw\ %%a in (%%~nxi) do (
for /r D:\鑫网通达信\ %%b in (%%~nxi) do (
if not "%%~za"=="%%~zb" copy/y xw\*.exe D:\鑫网通达信
)
)
)

产生的现象是连续复制,而且好象是三个文件一起复制了
7 发表于 2007-12-09 13:34 ·  中国 浙江 杭州 萧山区 电信
初级用户
★★
积分 172
发帖 77
注册 2006-11-23 15:05
19年会员
UID 71489
性别 男
状态 离线
最好是比较大小后如有不同复制,这样我可以把源文件改名成不带.EXE的文件,只有前面的名字,那样,源文件将不会被感染
8 发表于 2007-12-09 13:37 ·  中国 浙江 杭州 萧山区 电信
初级用户
★★
积分 172
发帖 77
注册 2006-11-23 15:05
19年会员
UID 71489
性别 男
状态 离线
其实只要判断某个文件就可以了
9 发表于 2007-12-09 13:41 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
@echo off
for /r xw\ %%i in (*.exe) do (
for /r xw\ %%a in (%%~nxi) do (
for /r D:\鑫网通达信\ %%b in (%%~nxi) do (
if not "%%~za"=="%%~zb" copy/y xw\*.exe D:\鑫网通达信
)
)
)
要么是%%a要么是%%b否则用3个for就没意义了
第一高手 第二高手

10 发表于 2007-12-09 13:44 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
简单点xxcopy论坛搜索有破解版的
第一高手 第二高手

11 发表于 2007-12-09 13:52 ·  中国 浙江 杭州 萧山区 电信
初级用户
★★
积分 172
发帖 77
注册 2006-11-23 15:05
19年会员
UID 71489
性别 男
状态 离线
你这个和我上面那个没有什么二样啊,我XW目录里有三个EXE文件,运行了这个代码后会产生连续不停的一直重复复制啊,而且我目标文件里的三个EXE现在没有变动过也是会复制的,

我想要源文件和目标文件不同时复制,不管目标文件新和旧,只要有变动就复制,可以一个一个文件的检测,这样吧,只要检测对比A 和B.EXE二个文件是否大小不同,不同就复制的命令,其中A文件没有后缀名

[ Last edited by cjfcjf222 on 2007-12-9 at 01:54 PM ]
12 发表于 2007-12-09 13:55 ·  中国 江苏 苏州 吴江区 电信
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
问一下,一根葱
a\ %%i
为什么 a目录可以写在 定义变量的前面,我接触DOS不久,没见过这种写法,还请赐教
委屈一下你,就当扫盲吧!
13 发表于 2007-12-09 14:17 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by huahua0919 at 2007-12-9 13:55:
问一下,一根葱
a\ %%i
为什么 a目录可以写在 定义变量的前面,我接触DOS不久,没见过这种写法,还请赐教
委屈一下你,就当扫盲吧!


for /?里有 for /r . %%a in (字符集) 扩展到当前目录包括子目录
for /?里有 for /r D:\ %%a in (字符集) 扩展到D:\目录包括子目录
第一高手 第二高手

14 发表于 2007-12-09 14:21 ·  中国 江苏 苏州 吴江区 电信
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
刚看了,是有的!谢谢
15 发表于 2007-12-09 14:32 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by cjfcjf222 at 2007-12-9 13:52:
你这个和我上面那个没有什么二样啊,我XW目录里有三个EXE文件,运行了这个代码后会产生连续不停的一直重复复制啊,而且我目标文件里的三个EXE现在没 ...

3个for傻瓜模式扩展更多应用,单纯对比2个文件当然就2个for,另外你用*统配符只要xw文件夹下有一个和D:\鑫网通达信\不同就复制全部exe到D:\鑫网通达信了

其实第1个代码是多余的第2个更稳定,为什么写第1个呢有的人喜欢效率高
第一高手 第二高手

论坛跳转: