[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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

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

谢谢各位前辈大大!!!
1

评分人数

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

TOP

本帖最后由 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){}
复制代码

TOP

我是有好多图片在一个文件夹以及其子文件夹里,它们的名字有可能会是一样的,但图片却不是一样的,所以,我不想让同名的图片被覆盖掉。

TOP

本帖最后由 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){}
复制代码

TOP

大侠,好像你这个代码不对吧?

TOP

  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. )
复制代码

TOP

重命名的名字,最好是在原名基本上改,比如:原来是叫a,改为a1

TOP

返回列表