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

[文件操作] 批处理怎样递归查找所有png复制到一个文件夹内,同名的递增重命名

  1. pushd D:\phpstudy_pro\WWW\xdzmb
  2. for /r %%a in (*.png) do (
  3. IF EXIST D:\phpstudy_pro\WWW\fff\%%~nxa (
  4. COPY %%a%%^(1) "D:\phpstudy_pro\WWW\fff"
  5. ) else (
  6. COPY %%a "D:\phpstudy_pro\WWW\fff"
  7. )
  8. )
  9. popd
  10. pause
复制代码
大概就是这个意思  这怎么改啊  在线等

本帖最后由 qixiaobin0715 于 2021-5-8 17:05 编辑

利用以前写的代码进行修改,未经测试
  1. @echo off
  2. set path1=D:\phpstudy_pro\WWW\xdzmb
  3. set path2=D:\phpstudy_pro\WWW\fff
  4. setlocal enabledelayedexpansion
  5. for /r %path1% %%a in (*.png) do (
  6.     if not exist "%path2%\%%~nxa" (copy "%%a" "%path2%\") else (
  7.         if not exist "%path2%\%%~na (2)%%~xa" (copy "%%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.             copy "%%a" "%path2%\%%~na (!n!)%%~xa"
  17.         )
  18.     )
  19. )
  20. pause
复制代码

TOP

本帖最后由 cutebe 于 2021-5-6 12:46 编辑
  1. ::复制所有(包含子目录中)的png到目标目录,重名则添加/修改数字后缀。
  2. @echo off
  3. setlocal enableDelayedExpansion
  4. set "sPath=D:\phpstudy_pro\WWW\xdzmb"
  5. set "tPath=D:\phpstudy_pro\WWW\fff"
  6. pushd %sPath%
  7. for /f "delims=" %%i in ('dir/s/b/a-d *.png')do (
  8. if exist "%tPath%\%%~nxi" (
  9. call :pngNum pngName "%%i"
  10. copy "%%i" "%tPath%\!pngName!%%~xi"
  11. )else copy "%%i" "%tPath%\"
  12. )
  13. popd
  14. goto :eof
  15. ::====完====
  16. :pngNum pngName pngPath
  17. setlocal
  18. pushd %~dp2
  19. set/am=1,@2=1
  20. for /l %%n in (0 1 9)do set _%%n=%%n
  21. set "strNum=%~n2"
  22. :numlp ::取末尾数字
  23. if defined _%strNum:~-1% (
  24. set/aLen+=1,m*=10
  25. set n=%strNum:~-1%%n%
  26. set strNum=%strNum:~,-1%
  27. goto :numlp
  28. )
  29. if "%Len%"=="" set/a num1=Len=1&goto :nend
  30. :nnext
  31. set/an1=1%n%+1
  32. set/ah=n1/m
  33. set num1=!@%h%!!n1:~-%Len%!
  34. if "%h%"==2 set/aLen+=1,m*=10
  35. :nend
  36. set "fName=%strNum%%num1%"
  37. if exist "%tPath%\%fName%%~x2" set n=%num1%&goto :nnext
  38. popd
  39. endlocal&set "%1=%fName%"
  40. goto :eof
复制代码
如无特别说明,代码测试环境均为 XP SP3

TOP

  1. @echo off &pushd D:\phpstudy_pro\WWW\xdzmb
  2. for /r %%i in (*.png) do (
  3.     set "strName=%%~nxi" & set "n="
  4.     call :CP "%%i"
  5. )
  6. pause & exit
  7. :CP
  8. if not exist "D:\phpstudy_pro\WWW\fff\%strName%" copy "%~1" "D:\phpstudy_pro\WWW\fff\%strName%" & goto :EOF
  9. if exist "D:\phpstudy_pro\WWW\fff\%strName%" set /a n+=1
  10. set "strName=%~n1(%n%)%~x1"
  11. goto :CP
复制代码

TOP

返回列表