找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29692|回复: 6

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

[复制链接]
发表于 2010-9-19 22:06:29 | 显示全部楼层 |阅读模式
已有文件 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次。有没有简单一点的方法?
发表于 2010-9-19 23:12:07 | 显示全部楼层
学习变量的处理,还有循环控制结构。
就可以了


现在写批处理不取巧了,大概就这样吧
  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 编辑 ]
 楼主| 发表于 2010-9-20 00:46:15 | 显示全部楼层
  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
复制代码
多文件批量处理的,希望得到的是下面的结果,哪里出错了?
发表于 2010-9-20 08:22:30 | 显示全部楼层

回复 3楼 的帖子

for中能用goto循环?
 楼主| 发表于 2010-9-21 18:11:12 | 显示全部楼层
>4
多文件处理要用到for
这没办法解决?
发表于 2010-9-21 20:23:09 | 显示全部楼层

回复 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%
复制代码
 楼主| 发表于 2010-9-23 23:17:52 | 显示全部楼层
  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
复制代码
不能批量处理了呢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 14:12 , Processed in 0.020341 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表