中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 19:03
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教如何批量复制文件时重命名文件
楼 主 请教如何批量复制文件时重命名文件 发表于 2006-12-27 04:31 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
我要把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 ]
2 发表于 2006-12-27 04:56 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线

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

  把文件尽量描述清楚。
3 发表于 2006-12-27 09:25 ·  中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
UID 73417
性别 男
状态 离线
这是用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 ]
4 发表于 2006-12-27 11:12 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
谢谢jmz573515
我不会vbs我想用批处理.批处理能做到吗?
5 发表于 2006-12-27 11:42 ·  中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
UID 73417
性别 男
状态 离线
8好意思,批处理我更是门外汉。我想一定会有高手能够做到。:)
6 发表于 2006-12-27 11:58 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  批处理版的来了:

@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没商量。
考虑问题复杂化,解决问题简洁化。
7 发表于 2006-12-27 14:47 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
哎!!!
强大的批处理呀,我要何时才学的会!!!!!!!!!!!!!
版主太强了,谢谢.....谢谢..........!
8 厉害 发表于 2007-05-29 22:03 ·  中国 广东 揭阳 电信
初级用户
积分 20
发帖 9
注册 2007-05-29 14:32
UID 89649
性别 男
状态 离线
厉害
9 发表于 2007-05-30 01:00 ·  中国 广东 湛江 电信
新手上路
积分 7
发帖 3
注册 2007-05-12 08:46
UID 88250
性别 男
状态 离线
对版主佩服得真是五体投地了,

叫我来肯定写不出那么精简!!!!
10 发表于 2007-05-30 02:57 ·  中国 广东 广州 海珠区 电信
初级用户
积分 130
发帖 15
注册 2005-02-10 00:00
UID 36077
性别 男
状态 离线
非常精简!!高手
11 发表于 2007-09-03 20:43 ·  中国 福建 三明 电信
中级用户
★★
积分 458
发帖 211
注册 2006-07-26 19:42
UID 59307
状态 离线
太厉害了
论坛跳转: