Board logo

标题: [文件操作] 复制文件时文件名(文件夹名)相同则重命名的批处理怎么写? [打印本页]

作者: 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

未测试。。。
:
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p yml=输入源文件夹名完整路径
  3. set /p ml=输入目标文件夹名完整路径
  4. for /f "delims=" %%a in ('dir/ad "%yml%"') do (
  5.    set "wjj="%%~nxa"&set "hou="
  6.    if exist "%ml%\!wjj!\" call :loop "%%~nxa"
  7.    xcopy /e /h /k "%yml%" "%ml%\!wjj!\"
  8. )
  9. for /f "delims=" %%a in ('dir/b/a-d "%yml%\*.*"') do (
  10.    set "hou=%%~xa"
  11.    if exist "%ml%\%%~nxa" call :loop "%%~na"
  12.    copy /y "%yml%\%%~nxa" "%ml%\!wjj!"
  13. )
  14. pause&exit
  15. :loop
  16. set /a n+=1
  17. if exist "%ml%\%~1_%n%%hou%\" goto loop
  18. set "wjj=%~1_%n%"
  19. set /a n=0
  20. goto :EOF
复制代码

作者: leo    时间: 2009-6-6 19:14

测试了,不行,出了一长串“分析错误”,和一长串“已复制     一个文件”但实际上什么也没复制过去




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2