中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]请教一个文件更新问题,谢谢
作者:
标题: [求助]请教一个文件更新问题,谢谢 上一主题 | 下一主题
ttkuaile
新手上路





积分 10
发帖 4
注册 2008-4-11
状态 离线
『楼 主』:  [求助]请教一个文件更新问题,谢谢

我想把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\。


十分感谢。

2008-4-11 16:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chenall
银牌会员




积分 1276
发帖 469
注册 2002-12-23
来自 福建泉州
状态 离线
『第 2 楼』:  

随便写了一个,未测试,

  Quote:
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
2008-4-11 16:28
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (366840202)  编辑帖子  回复  引用回复
ttkuaile
新手上路





积分 10
发帖 4
注册 2008-4-11
状态 离线
『第 3 楼』:  



  Quote:
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*.*文件。

2008-4-11 16:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 4 楼』:  


@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\"
)


2008-4-11 21:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ttkuaile
新手上路





积分 10
发帖 4
注册 2008-4-11
状态 离线
『第 5 楼』:  

4楼的方法我试过了,还是不行。

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

  Quote:
@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 ]

2008-4-12 09:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 6 楼』:  

楼主说上面的方法能实现,我不敢苟同,按分析照上面的方法在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
2008-4-12 10:53
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 7 楼』:  

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 ]



致精致简!
2008-4-12 12:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ttkuaile
新手上路





积分 10
发帖 4
注册 2008-4-11
状态 离线
『第 8 楼』:  

感谢7楼更正的代码,代码很简洁,效率也很高。


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

2008-4-12 21:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: