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

[文件操作] 批处理创建文件,如果文件已存在则添加序号。

已有文件 data.rar

要创建 data.txt ,如果 data.txt 已存在,则在文件名后自动添加序号,如 data (2).txt
如果2已存在,则改为3,以此类推。


  1. @echo off
  2. for %%a in (data.rar) do (
  3.   if not exist "%%~na.txt" (
  4.     echo "%%~na.txt"
  5.   ) else (
  6.     if not exist "%%~na (2).txt" (
  7.       echo "%%~na (2).txt"
  8.     ) else (
  9.       echo "%%~na (3).txt"
  10.     )
  11.   )
  12. )
  13. pause>nul
复制代码


临时解决的笨方法。如果要判断到99,这要写99次。有没有简单一点的方法?

  1. @echo off
  2. for %%a in (*.rar) do (
  3. if not exist "%%~na.txt" (
  4. echo "%%~na.txt"
  5. ) else (
  6. set name=%%~na
  7. goto :a
  8. )
  9. )
  10. pause&exit
  11. :a
  12. set i=2
  13. :plus
  14. if exist "%name% (%i%).txt" (
  15. set /a i+=1
  16. goto:plus
  17. )
  18. echo "%name% (%i%).txt"
  19. pause
复制代码
不能批量处理了呢。

TOP

回复 5楼 的帖子

提出来,放到外面。

2015-09-29 在QQ群里面看到有人提问,用这个思路解决了问题,特此记录。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p "zf=  输入字符(如 *.txt;a*.txt;???s.*):"
  4. set /p "lj=  设置你要备份的路径(如 c:\):"
  5. echo              正在全盘搜索......
  6. md "%lj%"
  7. for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
  8.     echo 正在处理 %%a:\
  9.     if exist %%a:\ (
  10.         for /f "tokens=*" %%i in ('dir /a /b /s "%%a:\%zf%"') do (
  11.             if exist "%lj%\%%~nxi" (
  12.                 call :GetNewName "%%~nxi"
  13.                 echo f | xcopy /h /y "%%i" "%lj%\!NewFile!"
  14.             ) else (
  15.                 xcopy /h /y "%%i" "%lj%\"
  16.             )
  17.         )
  18.     )
  19. )
  20. :GetNewName
  21. set "name=%~n1"
  22. set "ext=%~x1"
  23. set n=1
  24. :LoopName
  25. if exist "%lj%\%name%_!n!%ext%"  (
  26.    set /a n+=1
  27.    goto :LoopName
  28. )
  29. set NewFile=%name%_!n!%ext%
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

>4
多文件处理要用到for
这没办法解决?

TOP

回复 3楼 的帖子

for中能用goto循环?
***共同提高***

TOP

  1. @echo off
  2. for %%a in (*.rar) do (
  3.   if not exist "%%~na.txt" (
  4.     echo "%%~na.txt"
  5.   ) else (
  6.     set i=2
  7.     :a
  8.     if exist "%%~na (%i%).txt" (
  9.       set /a i+=1
  10.       goto :a
  11.     )
  12.     echo "%%~na (%i%).txt"
  13.   )
  14. )
  15. pause>nul
复制代码
多文件批量处理的,希望得到的是下面的结果,哪里出错了?
[attach]2979[/attach]

TOP

学习变量的处理,还有循环控制结构。
就可以了


现在写批处理不取巧了,大概就这样吧
  1. @echo off
  2. set name=test
  3. if not exist "%name%.txt" (
  4.   echo "%name%.txt"
  5.   pause
  6.   exit
  7. )
  8. ::同名文件存在,那么开始编号:
  9. set i=1
  10. :a
  11. if exist "%name%%i%"  (
  12.    set /a i+=1
  13.    goto :a
  14. )
  15. echo %name%%i%.txt
  16. pause
复制代码

[ 本帖最后由 523066680 于 2010-9-19 23:15 编辑 ]

TOP

返回列表