中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-08 02:24
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]请教一个文件更新问题,谢谢 查看 812 回复 7
楼 主 [求助]请教一个文件更新问题,谢谢 发表于 2008-04-11 16:08 ·  中国 浙江 台州 临海市 电信
新手上路
积分 10
发帖 4
注册 2008-04-11 15:40
18年会员
UID 115602
性别 男
状态 离线
我想把E:\soft\下的一个文件usbcleaner*(*表示软件版本号,不确定) 复制到H:\tools\,
如果H:\tools\下存在同名文件则跳过,不覆盖。
如果H:\tools\下存在usbcleaner*(不同名),则删除usbcleaner*,并将E:\soft\下的usbcleaner*复制到此文件夹。



举个例子
E:\soft\下为usbcleaner20080401.zip,H:\tools\下也为usbcleaner20080401.zip
则跳过,不覆盖。

E:\soft\下为usbcleaner20080401.zip,H:\tools\下为usbcleaner20091123.zip,
则删除usbcleaner20091123.zip,并复制usbcleaner20080401.zip到H:\tools\。


十分感谢。
2 发表于 2008-04-11 16:28 ·  中国 福建 泉州 电信
银牌会员
★★★
积分 1,276
发帖 469
注册 2002-12-23 13:00
23年会员
UID 586
性别 男
来自 福建泉州
状态 离线
随便写了一个,未测试,


for %%i in (e:\soft\usbcleaner*.zip) do if not exist h:\tools\%~nxi (del h:\tools\usbcleaner*.*&&copy %%i h:\tools)
QQ:366840202
http://chenall.net
3 发表于 2008-04-11 16:55 ·  中国 浙江 台州 临海市 电信
新手上路
积分 10
发帖 4
注册 2008-04-11 15:40
18年会员
UID 115602
性别 男
状态 离线

for %%i in (e:\soft\usbcleaner*.zip) do if not exist h:\tools\%~nxi (del h:\tools\usbcleaner*.*&&copy %%i h:\tools)



似乎不行啊,就算存在同名文件,还是会执行复制操作。

命令或许还能更简单点,E:\soft\确定只存在一个usbcleaner*.*文件。
4 发表于 2008-04-11 21:25 ·  中国 上海 电信
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
@echo off
for /f "delims=" %%i in ("E:\soft\usbcleaner20080401.zip") do (
set aa="%%~nxi"
if not exist "h:\tools\%aa%" del /s/f/q "h:\tools\usbcleaner*.*"&&copy /y "%%i" "h:\tools\"
)
5 发表于 2008-04-12 09:10 ·  中国 浙江 台州 临海市 电信
新手上路
积分 10
发帖 4
注册 2008-04-11 15:40
18年会员
UID 115602
性别 男
状态 离线
4楼的方法我试过了,还是不行。

我找到一个能解决的,但是看起来好像挺复杂的。



@echo off
set SrcDir=E:\soft
set DstDir=H:\tools
for /f "tokens=*" %%a in ('dir /b "%SrcDir%\usbcleaner*"') do (
if not exist "%DstDir%\%%a" (
del /q "%DstDir%\usbcleaner*"
copy "%SrcDir%\%%a" "%DstDir%\"
)
)


[ Last edited by ttkuaile on 2008-4-12 at 09:11 AM ]
6 发表于 2008-04-12 10:53 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
楼主说上面的方法能实现,我不敢苟同,按分析照上面的方法在tools文件夹中的usbcleaner*文件只会剩下从soft文件夹中复制过来的最后一个usbcleaner文件(如soft和tools中都只一个usbcleaner文件的当然这种方法能行),我以下的方法是不能删除不同名的文件但能成功复制并做到同名不覆盖。
@echo off
set a=e:\soft\&set b=h:\tools\&set c=usbcleaner
:begin
set /a n+=1
set d=skip=%n%
if "%d%"=="skip=0" set d=
for /f "%d% delims=" %%i in ('dir /b %a% ^| findstr "%c%"') do if exist %b%%%i (goto begin) else (copy %a%%%i %b%%%i)

如soft和tools中都只一个usbcleaner文件可改为:
@echo off
set a=e:\soft\&set b=h:\tools\&set c=usbcleaner
for /f "delims=" %%i in ('dir /b %a% ^| findstr "%c%"') do if exist %b%%%i (goto :eof) else (del /q %b%%c%*&copy %a%%%i %b%%%i)


[ Last edited by zw19750516 on 2008-4-12 at 11:18 AM ]
批处理之家新域名:www.bathome.net
7 发表于 2008-04-12 12:27 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
2楼代码是可以的,只是匆忙中少写了个百分号。
若是再加上引号就更完善了,可以防止文件名含空格时出错。
分行写,代码显得更整洁。
5楼提供的代码应该也是可以的,其实和2楼的差不多,只是2楼直接用for查找文件,5楼是用dir查找文件。
而6楼的代码似乎?。。。。。。效率更低。。。。。findstr没必要吧?
更正2楼代码如下
:

@echo off
for %%i in (e:\soft\usbcleaner*.zip) do (
if not exist "h:\tools\%%~nxi" (
del h:\tools\usbcleaner*.*
copy "%%i" h:\tools
))


[ Last edited by 26933062 on 2008-4-12 at 12:36 PM ]
致精致简!
8 发表于 2008-04-12 21:09 ·  中国 浙江 台州 电信
新手上路
积分 10
发帖 4
注册 2008-04-11 15:40
18年会员
UID 115602
性别 男
状态 离线
感谢7楼更正的代码,代码很简洁,效率也很高。


谢谢各位,现在更新U盘上的软件变得简单多了。
论坛跳转: