中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教如何批量复制文件时重命名文件
作者:
标题: 请教如何批量复制文件时重命名文件 上一主题 | 下一主题
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『楼 主』:  请教如何批量复制文件时重命名文件

我要把f盘的一大堆文件复制到e盘,要求:复制的时候如果遇到同名文件不覆盖原文件自动将复制的文件改名,改名方式是在原文件名后加序号,如:a.txt改为a1.txt再有就改为a2.txt,遇到b.txt就改为b1.txt.....b2.txt............


我的意思是f盘aaa文件夹里有很多txt文件,e盘123文件夹也有很多txt文件,并且有些是同名的,我现在要把f盘aaa文件夹里的的所有txt文件复制到e盘123文件夹里,要求遇到同名时,自动重命名,命名要求如上.[/size]

[ Last edited by 26933062 on 2006-12-26 at 07:03 PM ]

2006-12-27 04:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  


  复制哪些文件?一个文件夹中的所有文件还是一个类型的所有文件?

  把文件尽量描述清楚。


2006-12-27 04:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 3 楼』:  

这是用VBS写的(办法很笨,效率很低。)
功能:将E: \111下的所有文件 复制到E: \222文件夹下,遇到同名时重新命名,命名规则如楼主所说。具体路径可以自己更改。
注意:不处理文件夹。
Set fso=CreateObject("scripting.filesystemobject")
Set lswj=fso.CreateTextFile("e:\222\temp.temp")
lswj.Close
Set fil=fso.GetFolder("E:\111")
Set fils=fil.Files
Call mb()
For Each wj In fils
a=fso.GetBaseName(wj)
Call fuzhi()
Next
fso.DeleteFile "tmp.txt"
fso.DeleteFile "e:\222\temp.temp"
Set fso=nothing
Set fil=Nothing
Set fils=Nothing
MsgBox "复制完成!",48+4096,"操作成功"
Sub fuzhi()
Set bj=fso.openTextFile("tmp.txt")
i=0
Do While bj.AtEndOfStream <> True
b=bj.ReadLine
If a=Left(b,Len(a)) Then i=i+1
If i=0 Then
fso.CopyFile wj,"e:\222\"
Else
fso.CopyFile wj,"e:\222\"&a&i&"."&fso.GetExtensionName(wj)
End if
Loop
bj.Close
Set bj=Nothing
End Sub

Sub mb()
Set file=fso.GetFolder("E:\222")
Set tmp=fso.createTextFile("tmp.txt")
For Each mbwj In file.Files
tmp.WriteLine fso.GetBaseName(mbwj)
Next
tmp.Close
Set file=Nothing
Set files=Nothing
Set tmp=Nothing
End Sub
[ Last edited by jmz573515 on 2006-12-27 at 12:11 PM ]

2006-12-27 09:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





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

谢谢jmz573515
我不会vbs我想用批处理.批处理能做到吗?

2006-12-27 11:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 5 楼』:  

8好意思,批处理我更是门外汉。我想一定会有高手能够做到。:)

2006-12-27 11:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 6 楼』:  

  批处理版的来了:
@echo off
set num=0
for /f "delims=" %%i in ('dir /a-d /b f:\aa\*.txt') do (
    if not exist "e:\123\%%i" (
        copy "f:\aa\%%i" e:\123>nul
    ) else call :copy_txt "f:\aa\%%i" "%%~ni" %%~xi
)
goto :eof

:copy_txt
set file_n=%2
set "file_n=%file_n:~1,-1%"
set file_x=%3
set /a num+=1
if not exist "e:\123\%file_n%%num%%file_x%" (
    copy %1 "e:\123\%file_n%%num%%file_x%">nul
) else call :copy_txt %1 "%file_n%" %file_x%
set num=0
goto :eof
[ Last edited by namejm on 2006-12-26 at 10:59 PM ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-27 11:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





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

哎!!!
强大的批处理呀,我要何时才学的会!!!!!!!!!!!!!
版主太强了,谢谢.....谢谢..........!

2006-12-27 14:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
duzhuoshu
初级用户





积分 20
发帖 9
注册 2007-5-29
状态 离线
『第 8 楼』:  厉害

厉害

2007-5-29 22:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fenglingluan
新手上路





积分 7
发帖 3
注册 2007-5-12
状态 离线
『第 9 楼』:  

对版主佩服得真是五体投地了,

叫我来肯定写不出那么精简!!!!

2007-5-30 01:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
colorphoto
初级用户




积分 130
发帖 15
注册 2005-2-10
状态 离线
『第 10 楼』:  

非常精简!!高手

2007-5-30 02:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 11 楼』:  

太厉害了

2007-9-3 20:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: