中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-29 07:38
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求助,无论目标文件是新还是旧,只要和源文件不同就复制 查看 1,609 回复 20
16 发表于 2007-12-09 14:44 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
@echo off
for /f "tokens=*" %%a in ('dir /s/b/a-d "xw\a b c.exe"') do (
for /f "tokens=*" %%b in ('dir /s/b/a-d "D:\鑫网通达信\a b c.exe"') do (
if not "%%~za"=="%%~zb" if not "%%~ta"=="%%~tb" echo "%%a" 不同于 "%%b"
)
)
pause

[ Last edited by fastslz on 2007-12-9 at 04:53 PM ]
第一高手 第二高手

17 发表于 2007-12-09 16:44 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
一个简单问题居然搞得这么复杂?

楼主的问题越看越糊涂了
在一说判断a和b文件夹的exe文件是否相同.
在11楼又说a文件没有后缀.

我想楼主大概是这个意识
a文件夹里面的所有都文件是备份文件,如果发现b文件夹里面的文件和a文件夹里面的
文件不同就用a文件夹里的文件覆盖b文件夹里的文件.
如果是这样的话,2楼的代码应该可以解决问题啊?难道你的文件名含有空格?
那么2楼的第二个代码应该也可以啊.!

to 2 楼
第一个代码中的第二个for是否有点多余?直接 if %%~zi 不可以么?

to 16 楼
是否发帖太急了,多写了一个if 且最后一个 if 好像漏掉了一个字母 z
致精致简!
18 发表于 2007-12-09 17:17 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by 26933062 at 2007-12-9 16:44:
to 16 楼
是否发帖太急了,多写了一个if 且最后一个 if 好像漏掉了一个字母 z

是的,其实漏掉是t 改过来了
IE7很麻烦经常询问允许剪贴板访问,老是出现误操作郁闷~
2楼呢为什么用3个for归功于楼主说“无论目标文件是新还是旧”,模糊方式第1个for是遍历到一个文件名。傻瓜方式直接遍历整个分区里同文件名之间的对比。
第一高手 第二高手

19 发表于 2007-12-09 22:25 ·  中国 浙江 杭州 电信
初级用户
★★
积分 172
发帖 77
注册 2006-11-23 15:05
19年会员
UID 71489
性别 男
状态 离线
'dir /b为没有标题信息摘要,好象不能比较二个文件有差异吧,我的意思是二个文件只要大小不同,就把源文件覆盖到目标文件,
理论上就是把一个程序的EXE文件备份一个,为防止病毒感染,备份的文件应该是没有后缀的,由于XCOPY只检测源文件比目标文件新时才复制,还有XXCOPY也是这样的,上面的那段代码也没有起到作用
20 发表于 2007-12-09 23:14 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
@goto start_1
终于把问题说清楚了。
a文件夹于b文件夹的文件是同名的,但a文件夹中的是没有后缀的。
循环a文件夹中的所有文件,于b文件夹中的同名的exe文件对比,
大小不一样的就复制a文件夹中的文件到b文件夹中,后缀为exe、覆盖原b文件夹中的exe文件
:start_1 ::

@echo off
for /f "delims=" %%a in ('dir/b/a-d a\*.*') do (
for /f "delims=" %%i in ('dir/b/s/a-d "b\%%~na.exe"') do (
if not "%%~za"=="%%~zi" echo copy/y "%%a" "b\%%~na.exe"
))
pause


[ Last edited by 26933062 on 2007-12-9 at 11:16 PM ]
致精致简!
21 发表于 2007-12-09 23:52 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by cjfcjf222 at 2007-12-9 22:25:
'dir /b为没有标题信息摘要,好象不能比较二个文件有差异吧,我的意思是二个文件只要大小不同,就把源文件覆盖到目标文件,
理论上就是把一个程序的E ...



这帖子还真累,楼主半天还没明白用什么去判断比较二个文件有差异的,for /?然后按5次Enter
for /f "delims=" %%a in ('dir/b/a-d a\*.exe') do echo 文件%%a 大小%%~za字节
for /f "delims=" %%a in ('dir/b/a-d a\*.exe') do echo 文件%%a 修改时间%%~ta
第一高手 第二高手

论坛跳转: