Board logo

标题: [文件操作] 批处理如何实现批量复制文件到指定文件夹并对重名文件以递增序号方式更名? [打印本页]

作者: ihtyuu    时间: 2016-5-10 11:32     标题: 批处理如何实现批量复制文件到指定文件夹并对重名文件以递增序号方式更名?

本帖最后由 pcl_test 于 2016-5-10 20:17 编辑

我想把一个文件夹以及其子文件夹里的所有文件全部复制到另一个文件夹里,如果遇到重名的,自动重命名
文件一般是图片文件
我原来的代码是:
for /f "delims=" %%f in ('dir /s /b *.jpg') do copy "%%f" c:\fun

for /f "delims=" %%f in ('dir /s /b *.gif') do copy "%%f" c:\fun

请教一下,如何改为可以重名自动重命名的代码?

谢谢各位前辈大大!!!
作者: ihtyuu    时间: 2016-5-10 11:33

重命名的名字,最好是在原名基本上改,比如:原来是叫a,改为a1
作者: Nsqs    时间: 2016-5-10 12:39

  1. @echo off
  2. for /r %%1 in (*.txt)do (
  3. if defined %%~nx1 (
  4. set/a #+=1,#1=#/100 %% 10,#2=#/10 %% 10,#3=#/1 %% 10
  5. call echo ren "%%1" %%~n1%%#1%%%%#2%%%%#3%%%%~x1 %%去掉echo即可重命名%%
  6. )
  7. set %%~nx1=;
  8. )
复制代码

作者: ihtyuu    时间: 2016-5-10 22:30

大侠,好像你这个代码不对吧?
作者: pcl_test    时间: 2016-5-10 22:32

本帖最后由 pcl_test 于 2016-5-10 23:33 编辑

假设目标文件夹为空文件夹
  1. /*&cls
  2. @echo off
  3. set "fd=C:\fun"
  4. if not exist "%fd%" md "%fd%"
  5. for /f "tokens=1*delims=|" %%a in ('dir /a-d/b/s *.jpg *.gif^|cscript -nologo -e:jscript "%~f0"') do copy "%%a" "%fd%\%%b"
  6. pause&exit
  7. */
  8. var a = {}, s = '';
  9. try{
  10.     var files = WSH.StdIn.ReadAll().split(/\r\n/);
  11.     for(var i = 0; i<files.length; i++){
  12.         var f = files[i].replace(/^.+\\([^\\]+)(\.[^\.]+)$/, function($0, $1, $2){
  13.             var name = ($1 + $2).toLowerCase();
  14.             if(!a[name]){
  15.                 a[name] = 1;return $0 +'|'+ $1 +$2;
  16.             }else{
  17.                 a[name]++;return $0 +'|'+ $1 +'_'+ (a[name]-1) +$2;
  18.             }
  19.         })
  20.         s += f+'\r\n';
  21.     }
  22.     WSH.echo(s)
  23. }catch(e){}
复制代码

作者: ihtyuu    时间: 2016-5-10 22:32

我是有好多图片在一个文件夹以及其子文件夹里,它们的名字有可能会是一样的,但图片却不是一样的,所以,我不想让同名的图片被覆盖掉。
作者: pcl_test    时间: 2016-5-10 23:33

本帖最后由 pcl_test 于 2016-5-10 23:48 编辑

假设目标文件夹已有或没有文件
  1. /*&cls
  2. @echo off
  3. set "fd=C:\fun"
  4. if not exist "%fd%" md "%fd%"
  5. (dir /a-d/b/s *.jpg *.gif)|cscript -nologo -e:jscript "%~f0" "%fd%"
  6. pause&exit
  7. */
  8. var fso = new ActiveXObject('Scripting.FileSystemObject');
  9. var fd = WSH.Arguments(0);
  10. try{
  11.     var files = WSH.StdIn.ReadAll().split(/\r\n/);
  12.     for(var i = 0; i<files.length; i++){
  13.         var fname = fso.GetFile(files[i]).Name;
  14.         var fn = fname.replace(/\.[^\.]+$/, '');
  15.         var t = 0, file = fd +'\\'+ fname;
  16.         while(fso.FileExists(file)){
  17.             t++;
  18.             var file = fd +'\\'+ fn +'_'+ t +'.'+ fname.split('.').pop();
  19.         }
  20.         fso.CopyFile(files[i], file);
  21.     }
  22. }catch(e){}
复制代码

作者: ihtyuu    时间: 2016-5-11 00:04

多谢版主!!!:):victory:




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