找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 32848|回复: 4

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

[复制链接]
发表于 2021-2-20 14:11:23 | 显示全部楼层 |阅读模式
请问下,我需要移动C:\1文件夹及子文件夹中的所有.doc文件和.ppt文件到E:\2文件夹,只移动文件,不用保持目录结构,如果遇到文件名重复,文件名后自动加类似(1)序号。
望牛人动动你的发财手告诉我下bat代码,谢啦。
发表于 2021-2-20 15:39:24 | 显示全部楼层
自己以前处理文件写的代码,与你的需求还是有较大的差异,修改后未经验证。运行代码如果没问题,以后使用时可将所有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
复制代码
 楼主| 发表于 2021-2-20 17:26:45 | 显示全部楼层
本帖最后由 rosande 于 2021-2-20 17:42 编辑

回复 2# qixiaobin0715


多谢出手相助
发表于 2024-6-4 14:32:35 | 显示全部楼层
本帖最后由 娜美 于 2024-6-4 14:51 编辑

通过搜索进来发现的,,  试了2楼大哥哥的, 例如,  D:\A 和 D:\B 文件夹里的名称相同, 执行copy or move前3次的代码操作是会重命名, 但当执行第4次或5次以后就会将以覆盖文件方式进行,   如看到, 请再增大—下支持次数,    例如  10次以后再覆盖也没所谓了
发表于 2024-6-4 15:07:44 | 显示全部楼层
那是根据好多年前自用的代码修改的,考虑的不是太周全,自用代码写得也不成熟,有点复杂,不是太好用,大致看了看,不知这样修改是否可行,如果不行的话,建议放弃此方案:
  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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 00:57 , Processed in 0.017982 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表