标题: [文件操作] 复制文件时文件名(文件夹名)相同则重命名的批处理怎么写? [打印本页]
作者: leo 时间: 2009-5-31 23:40 标题: 复制文件时文件名(文件夹名)相同则重命名的批处理怎么写?
我要复制一个文件夹里面的文件及子文件夹到另外一个文件夹,如果目标文件夹里面现有的文件(或文件夹)名与源文件夹中的相同,则将源文件夹中的文件(文件夹)后面加个a(或者其他什么符号)再复制到目标文件夹,比如将“E:\Temp”里面的文件夹“111”,和文本文档“222.txt”复制到“D:\TTT”,如果D:\TTT里面已经有111和222.txt,则重命名为111a和222a.txt,从而不会覆盖掉D:\TTT里面已经有111和222.txt,该怎么写bat呢,能实现吗?
作者: Batcher 时间: 2009-5-31 23:47
如果目标文件夹中如果既有111和222.txt,又有111a和222a.txt,咋办?
作者: leo 时间: 2009-6-4 00:09
如果可以实现,就应该是111a和222a.txt以及111aa和222aa.txt
作者: leo 时间: 2009-6-4 21:28
难道不能实现这个功能?
作者: Batcher 时间: 2009-6-4 21:36 标题: 回复 3楼 的帖子
如果目标文件夹中如果既有111和222.txt,又有111a和222a.txt,又有111aa和222aa.txt,一直到最后不知道有多少个a,咋办?
作者: leo 时间: 2009-6-4 22:39
也许这是个问题。主要目的是防止覆盖掉目标文件夹下的文件及文件夹,有没有什么办法?
作者: 随风 时间: 2009-6-4 22:52
防止文件名重复可以用加数字的办法 如aaa 则 aaa_1 aaa_2
现在问题是如果复制 e:\tem 到 d:\111 但已经有tem 了,则改名为: d:\111\tem_1 那么它里面的文件也要一起改名吗?
作者: leo 时间: 2009-6-4 23:12
如果改了文件夹名字,里面的文件则不用改了,不同的文件夹名不会覆盖
作者: 随风 时间: 2009-6-5 01:58
未测试。。。
:- @echo off&setlocal enabledelayedexpansion
- set /p yml=输入源文件夹名完整路径
- set /p ml=输入目标文件夹名完整路径
- for /f "delims=" %%a in ('dir/ad "%yml%"') do (
- set "wjj="%%~nxa"&set "hou="
- if exist "%ml%\!wjj!\" call :loop "%%~nxa"
- xcopy /e /h /k "%yml%" "%ml%\!wjj!\"
- )
- for /f "delims=" %%a in ('dir/b/a-d "%yml%\*.*"') do (
- set "hou=%%~xa"
- if exist "%ml%\%%~nxa" call :loop "%%~na"
- copy /y "%yml%\%%~nxa" "%ml%\!wjj!"
- )
- pause&exit
- :loop
- set /a n+=1
- if exist "%ml%\%~1_%n%%hou%\" goto loop
- set "wjj=%~1_%n%"
- set /a n=0
- goto :EOF
复制代码
作者: leo 时间: 2009-6-6 19:14
测试了,不行,出了一长串“分析错误”,和一长串“已复制 一个文件”但实际上什么也没复制过去
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |