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

[文件操作] 求助批处理移动遇相同向上递增计数

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set path1=C:\2
  4. set path2=D:\3
  5. for /r %path1% %%a in (*.txt) do (
  6. if not exist "%path2%\%%~nxa" (move "%%a" "%path2%\") else (
  7. if not exist "%path2%\%%~na(2)%%~xa" (move "%%a" "%path2%\%%~na(2)%%~xa") else (
  8. set n=2
  9. for /f "delims=" %%b in ('dir /b /a-d %path2%\*^|findstr /r /be /c:"%%~na ([0-9][0-9]*)%%~xa"') do (
  10. set "str=%%~nb"
  11. set "m=!str:%%~na (=!"
  12. set "m=!m:)=!"
  13. if !m! gtr !n! set /a n=m
  14. )
  15. set /a n+=1
  16. move "%%a" "%path2%\%%~na(!n!)%%~xa"
  17. )
  18. )
  19. )
  20. endlocal
  21. pause
  22. 移动文件时遇相同向上计数递增, 现在是感觉不太科学
  23. 新建文本文档(2).txt
  24. 新建文本文档(2)(2).txt
  25. 新建文本文档(2)(2)(2).txt
  26. 新建文本文档(2)(2)(2)(2).txt
复制代码
希望写成像windows那样向上计数递增
新建文本文档.txt
新建文本文档 (2).txt
新建文本文档 (3).txt
新建文本文档 (4).txt
新建文本文档 (5).txt

回复 22# 娜美


   call 中的goto 有什么影响?
  1. http://bbs.bathome.net/redirect.php?goto=findpost&ptid=36991&pid=281494
复制代码
bat小白,请多指教!谢谢!

TOP

回复 25# aloha20200628


    漂亮, 正确了 thanks哦

TOP

回复 24# 娜美

漏了一笔清零 5楼代码已订正,再试试吧...

TOP

本帖最后由 娜美 于 2024-6-3 15:04 编辑

回复 23# aloha20200628


   嗯你的5楼也对
但是不支持目录下有多个文件夹及子文件夹, 我偿试添加后 /s ('dir /s /b /a-d *.txt *.xlsx *.rar')
如果源目录下有多个文件夹及子文件夹  里面都有这些相同文件名称
  1. 新建文本文档 (2).txt
  2. 新建文本文档 (3).txt
复制代码
目标文件夹也有这些相同文件名称
  1. 新建文本文档 (2).txt
  2. 新建文本文档 (3).txt
复制代码
就会发生这种情况
  1. 新建文本文档 (2).txt
  2. 新建文本文档 (3).txt
  3. 新建文本文档 (4).txt
  4. 新建文本文档 (32).txt
  5. 新建文本文档 (232).txt
  6. 新建文本文档 (3232).txt
  7. 新建文本文档 (23232).txt
  8. 新建文本文档 (323232).txt
  9. 新建文本文档 (2323232).txt
  10. 新建文本文档 (32323232).txt
复制代码

TOP

本帖最后由 aloha20200628 于 2024-6-3 14:18 编辑

回复 21# 娜美

15楼代码的基本逻辑是不处理源文件夹存在形如 abc (2).txt 的文件(即不会分割根名和序号两个字段),故会出现 移动/复制 更名结果例如 abc (2)(...).txt 的文件名;其二是匹配更名规则不保留括号前的空格,与系统默认更名规则查了一个字符。

TOP

回复 15# 77七


    嗯呐是对的, 不过最好能不使用goto跳转方法,  因为要插入脚本, 会影响其它工作

TOP

本帖最后由 娜美 于 2024-6-3 14:59 编辑
如果原文件夹有

新建文本文档.txt
新建文本文档 (2).txt

如果目的文件夹有

新建文本文档 (4).txt ...
newswan 发表于 2024-6-3 09:31



    如果源文件夹,  目标文件夹,  都有相同名称, 这种情况5楼和15楼也是正确的,  它会递增命名

TOP

回复  娜美 再试试2楼
smss 发表于 2024-6-3 05:52



报错呢

TOP

如果原文件夹有

新建文本文档.txt
新建文本文档 (2).txt

如果目的文件夹有

新建文本文档 (4).txt
新建文本文档 (5).txt

如何排序

TOP

回复 11# 77七 用其它语言习惯了

TOP

回复 6# 娜美 再试试2楼

TOP

Ok thanks大家

TOP

本帖最后由 77七 于 2024-6-2 18:13 编辑

回复 13# 娜美


   我测试了http://www.bathome.net/redirect.php?goto=findpost&;ptid=36991&pid=173326,是对的,其余未测试。使用代码需要一些基础知识,比如 更改工作路径(cd)、copy改move等。
  1. @echo off
  2. rem "http://www.bathome.net/redirect.php?goto=findpost&ptid=36991&pid=173326"
  3. cd /d "d:\A"
  4. for /r %%i in (*) do (
  5.     set "strName=%%~nxi" & set "n="
  6.     call :CP "%%i"
  7. )
  8. pause & exit
  9. :CP
  10. if not exist "d:\B\%strName%" move "%~1" "d:\B\%strName%" & goto :EOF
  11. if exist "d:\B\%strName%" set /a n+=1
  12. set "strName=%~n1(%n%)%~x1"
  13. goto :CP
复制代码
bat小白,请多指教!谢谢!

TOP

本帖最后由 娜美 于 2024-6-2 18:10 编辑

回复 5# aloha20200628


   谢谢,  好了

TOP

返回列表