Board logo

标题: 请教如何批量复制文件时重命名文件 [打印本页]

作者: 26933062     时间: 2006-12-27 04:31    标题: 请教如何批量复制文件时重命名文件

我要把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 ]
作者: lxmxn     时间: 2006-12-27 04:56

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

  把文件尽量描述清楚。

作者: jmz573515     时间: 2006-12-27 09:25
这是用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 ]
作者: 26933062     时间: 2006-12-27 11:12
谢谢jmz573515
我不会vbs我想用批处理.批处理能做到吗?
作者: jmz573515     时间: 2006-12-27 11:42
8好意思,批处理我更是门外汉。我想一定会有高手能够做到。:)
作者: namejm     时间: 2006-12-27 11:58
  批处理版的来了:
@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 ]
作者: 26933062     时间: 2006-12-27 14:47
哎!!!
强大的批处理呀,我要何时才学的会!!!!!!!!!!!!!
版主太强了,谢谢.....谢谢..........!
作者: duzhuoshu     时间: 2007-5-29 22:03    标题: 厉害

厉害
作者: fenglingluan     时间: 2007-5-30 01:00
对版主佩服得真是五体投地了,

叫我来肯定写不出那么精简!!!!
作者: colorphoto     时间: 2007-5-30 02:57
非常精简!!高手
作者: wxcute     时间: 2007-9-3 20:43
太厉害了