|
cjfcjf222
初级用户
积分 172
发帖 77
注册 2006-11-23
状态 离线
|
『楼 主』:
求助,无论目标文件是新还是旧,只要和源文件不同就复制
求助,无论目标文件是新还是旧,只要和源文件不同就复制的BAT
比如A目录中的EXE文件去比较B目录中的EXE文件,如果B目录中的文件和A目录中的文件不同就复制,
|
|
2007-12-9 11:35 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
『第
2 楼』:
简单效率较高的代码
@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
|
第一高手 第二高手
我的小站
|
|
2007-12-9 12:39 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
『第
3 楼』:
哦补充一点除了用if not "%%~za"=="%%~zb"以外还可以用
if not "%%~ta"=="%%~tb"
预知详情请看for /?
|
第一高手 第二高手
我的小站
|
|
2007-12-9 12:44 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
4 楼』:
这个问题似乎没这么复杂吧?
xcopy 的 /d 参数好像就有这个功能
|
致精致简! |
|
2007-12-9 12:53 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
『第
5 楼』:
是的但叫楼主如何去用xcopy还不如直接给他代码,扫盲难~,上面还没加copy参数,就怕回头楼主说判断出来了就是没有复制,总之什么都有可能,类似帖子回怕了~所以我3楼注明了预知详情请看for /?
|
第一高手 第二高手
我的小站
|
|
2007-12-9 13:20 |
|
|
cjfcjf222
初级用户
积分 172
发帖 77
注册 2006-11-23
状态 离线
|
『第
6 楼』:
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:\鑫网通达信
)
)
)
产生的现象是连续复制,而且好象是三个文件一起复制了
|
|
2007-12-9 13:33 |
|
|
cjfcjf222
初级用户
积分 172
发帖 77
注册 2006-11-23
状态 离线
|
『第
7 楼』:
最好是比较大小后如有不同复制,这样我可以把源文件改名成不带.EXE的文件,只有前面的名字,那样,源文件将不会被感染
|
|
2007-12-9 13:34 |
|
|
cjfcjf222
初级用户
积分 172
发帖 77
注册 2006-11-23
状态 离线
|
|
2007-12-9 13:37 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
『第
9 楼』:
@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就没意义了
|
第一高手 第二高手
我的小站
|
|
2007-12-9 13:41 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
|
2007-12-9 13:44 |
|
|
cjfcjf222
初级用户
积分 172
发帖 77
注册 2006-11-23
状态 离线
|
『第
11 楼』:
你这个和我上面那个没有什么二样啊,我XW目录里有三个EXE文件,运行了这个代码后会产生连续不停的一直重复复制啊,而且我目标文件里的三个EXE现在没有变动过也是会复制的,
我想要源文件和目标文件不同时复制,不管目标文件新和旧,只要有变动就复制,可以一个一个文件的检测,这样吧,只要检测对比A 和B.EXE二个文件是否大小不同,不同就复制的命令,其中A文件没有后缀名
[ Last edited by cjfcjf222 on 2007-12-9 at 01:54 PM ]
|
|
2007-12-9 13:52 |
|
|
huahua0919
银牌会员
积分 1608
发帖 780
注册 2007-10-7
状态 离线
|
『第
12 楼』:
问一下,一根葱
a\ %%i
为什么 a目录可以写在 定义变量的前面,我接触DOS不久,没见过这种写法,还请赐教
委屈一下你,就当扫盲吧!
|
|
2007-12-9 13:55 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
『第
13 楼』:
Quote: | 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:\目录包括子目录
|
第一高手 第二高手
我的小站
|
|
2007-12-9 14:17 |
|
|
huahua0919
银牌会员
积分 1608
发帖 780
注册 2007-10-7
状态 离线
|
|
2007-12-9 14:21 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
『第
15 楼』:
Quote: | 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个呢有的人喜欢效率高
|
第一高手 第二高手
我的小站
|
|
2007-12-9 14:32 |
|