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

[文件操作] 批处理怎样移动文件,遇到重命名自动加序号

请问下,我需要移动C:\1文件夹及子文件夹中的所有.doc文件和.ppt文件到E:\2文件夹,只移动文件,不用保持目录结构,如果遇到文件名重复,文件名后自动加类似(1)序号。
望牛人动动你的发财手告诉我下bat代码,谢啦。

自己以前处理文件写的代码,与你的需求还是有较大的差异,修改后未经验证。运行代码如果没问题,以后使用时可将所有copy改为move就行了。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /r "c:\1" %%a in ("*.doc") do (
  4.     if not exist "E:\2\%%~nxa" (copy "%%a" "E:\2\") else (
  5.         if not exist "E:\2\%%~na (2)%%~xa" (copy "%%a" "E:\2\%%~na (2)%%~xa") else (
  6.             set n=2
  7.             for /f "delims=" %%b in ('dir /b /a-d E:\2\*.doc^|findstr /r /be /c:"%%~na ([0-9][0-9]*)%%~xa"') do (
  8.                 set "str=%%~nb"
  9.                 set "m=!str:%%~na (=!"
  10.                 set "m=!m:)=!"
  11.                 if !m! gtr !n! set /a n=m
  12.             )
  13.             set /a n+=1
  14.             copy "%%a" "E:\2\%%~na (!n!)%%~xa"
  15.         )
  16.     )
  17. )
  18. pause
复制代码

TOP

本帖最后由 rosande 于 2021-2-20 17:42 编辑

回复 2# qixiaobin0715


多谢出手相助

TOP

本帖最后由 娜美 于 2024-6-4 14:51 编辑

通过搜索进来发现的,,  试了2楼大哥哥的, 例如,  D:\A 和 D:\B 文件夹里的名称相同, 执行copy or move前3次的代码操作是会重命名, 但当执行第4次或5次以后就会将以覆盖文件方式进行,   如看到, 请再增大—下支持次数,    例如  10次以后再覆盖也没所谓了

TOP

那是根据好多年前自用的代码修改的,考虑的不是太周全,自用代码写得也不成熟,有点复杂,不是太好用,大致看了看,不知这样修改是否可行,如果不行的话,建议放弃此方案:
  1. @echo off
  2. for /r "c:\1" %%a in ("*.doc") do (
  3.     if not exist "E:\2\%%~nxa" (copy "%%a" "E:\2\") else (
  4.         if not exist "E:\2\%%~na (2)%%~xa" (copy "%%a" "E:\2\%%~na (2)%%~xa") else (
  5.             set n=2
  6.             setlocal enabledelayedexpansion
  7.             for /f "delims=" %%b in ('dir /b /a-d E:\2\*.doc^|findstr /r /be /c:"%%~na ([0-9][0-9]*)%%~xa"') do (
  8.                 set "str=%%~nb"
  9.                 set "m=!str:%%~na (=!"
  10.                 set "m=!m:)=!"
  11.                 if !m! gtr !n! set /a n=m
  12.             )
  13.             set /a n+=1
  14.             copy "%%a" "E:\2\%%~na (!n!)%%~xa"
  15.             endlocal
  16.         )
  17.     )
  18. )
  19. pause
复制代码

TOP

返回列表