[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
code 1
  1. @echo off
  2. rem 假设最多有20+1个重名文件
  3. for /f "delims=" %%i in ('dir /b /s /a-d *总结*.doc') do (
  4. if not exist "文件夹2\%%~nxi" (
  5. copy /y "%%i" "文件夹2\%%~nxi"
  6. ) else (
  7. set m=
  8. for /l %%l in (1,1,20) do (
  9. if not defined m (
  10. if not exist "文件夹2\%%~ni%%l%%~xi" (
  11. copy /y "%%i" "文件夹2\%%~ni%%l%%~xi"
  12. set m=1
  13. )
  14. )
  15. )
  16. )
  17. )
  18. pause
复制代码



code 2
  1. @echo off
  2. rem 文件名不含空格、特殊符号
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /s /a-d *总结*.doc') do (
  5. copy /y "%%i" "文件夹2\%%~ni!#%%~ni!%%~xi"
  6. set /a #%%~ni+=1
  7. )
  8. endlocal
  9. pause
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

本帖最后由 77七 于 2023-3-28 21:28 编辑

code 2 如果操作之前文件夹2中已经存在文件
好像写多余了...既然是复制到同目录下...
  1. @echo off
  2. rem 文件名不含空格、特殊符号
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /s /a-d *总结*.doc') do (
  5.         if not exist "文件夹2\%%~nxi" (
  6.                 copy /y "%%i" "文件夹2\%%~nxi"
  7.         ) else (
  8.                 set /a #%%~ni+=1
  9.                 copy /y "%%i" "文件夹2\%%~ni!#%%~ni!%%~xi"
  10.         )
  11. )
  12. endlocal
  13. pause
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

回复 5# terse回复 6# qixiaobin0715

多谢两位大佬指点!
我写的时候确实没考虑过这种情况,添加序号后与原文件夹存在的文件重名,考虑不周。
不知道楼主的实际情况:是不是总结1已经是总结添加序号的结果,还是总结和总结1是“两类”。
如果存在两个总结1.doc,歧义就明显了,是重写代码重新命名为总结1-4,还是其它
假设原文件夹文件名中数字1不代表序号,在2楼代码2基础上修改,把set /a 行和copy行调换位置,直接给每个文件都添加序号(如下结果)。
rem 情况1
总结1.doc
总结.doc
总结.doc

rem 情况2
总结1.doc
总结1.doc
总结.doc
总结.doc

rem 情况2 结果
总结11.doc
总结12.doc
总结1.doc
总结2.doc
bat小白,请多指教!谢谢!

TOP

回复 8# qixiaobin0715


   

先说一个前提,不知道有没有歧义,按楼主的代码,文件夹2 操作前是没有相关文件的。
大佬举的例子,不知道批处理执行前,原文件名是什么情况?
  1. 总结.doc
  2. 总结.doc
  3. 总结 (1).doc
  4. 总结 (1).doc
复制代码


如果执行前原文件名是像如上的情况,执行后是重新编号了吗,像如下这样。而不是只添加一个后缀序号
  1. 总结 .doc
  2. 总结 (1).doc
  3. 总结 (2).doc
  4. 总结 (3).doc
复制代码
bat小白,请多指教!谢谢!

TOP

回复 10# ww0000


  
  1. @echo off
  2. robocopy "文件夹1" "文件夹2" *总结*.doc /s
  3. pause
复制代码
试试这样行吗
1

评分人数

    • ww0000: 谢谢帮助!技术 + 1
bat小白,请多指教!谢谢!

TOP

返回列表