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

回复 1# 娜美

以下代码可处理源文件名与目标文件名的重复情况-举例如下:
        源文件夹中要移至目标文件夹的文件是》abc.txt,abc (2).txt
        目标文件夹已存在的文件是》abc.txt,abc (2).txt,abc (3).txt
        处理结果是目标文件夹新增两个文件》abc (4).txt,abc (5).txt
代码第12行数字 -5 管控文件名序号长度(2-999),绝对值增加则长度增加
  1. @echo off &setlocal enabledelayedexpansion
  2. set "path1=C:\2" &set "path2=D:\3" &pushd "!path1!"
  3. for /f "delims=" %%F in ('dir /b/a-d *.txt *.rar *.zip *.jpg *.mp4') do (
  4. if not exist "!path2!\%%~nxF" (move "%%F" "!path2!\") else (
  5. (call :get#nF "%%~nF" nFn n) & (call :check#2F nFn "%%~xF" !n! qF)
  6. move "%%F" "!path2!\!nFn!(!qF!)%%~xF"
  7. )
  8. )
  9. popd&endlocal&exit/b
  10. :get#nF //REM 获取源文件名序号锚点
  11. set "_nF=%~1" &if "!_nF:~-1!" neq ")" (set "%~2=%~1 " &set "%~3=2" &exit/b)
  12. set "_k=" &for /L %%k in (-2,-1,-5) do (
  13. set "c=!_nF:~%%k,1!"
  14. if "!c!"=="(" (set "%~2=!_nF:~0,%%k!" &set "%~3=!_k!" &exit/b) else (
  15. if "!c!" geq "0" if "!c!" leq "9" set "_k=!c!!_k!"
  16. )
  17. )
  18. exit/b
  19. :check#2F //REM 验证目标文件名不重复序号
  20. set "_qF=%~3"
  21. :[Loop]
  22. if exist "!path2!\!%~1!(!_qF!)%~2" (set/a "_qF+=1" &goto[Loop])
  23. set "%~4=!_qF!" &exit/b
复制代码

TOP

回复 6# 娜美

楼主的实际情况与5楼代码的测试举例有何区别?

TOP

回复 9# 娜美

订正了5楼代码,增加了多种文件类型匹配...

TOP

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

回复 21# 娜美

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

TOP

回复 24# 娜美

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

TOP

返回列表