标题: [文件操作] 批处理创建文件,如果文件已存在则添加序号。 [打印本页]
作者: ttenma 时间: 2010-9-19 22:06 标题: 批处理创建文件,如果文件已存在则添加序号。
已有文件 data.rar
要创建 data.txt ,如果 data.txt 已存在,则在文件名后自动添加序号,如 data (2).txt
如果2已存在,则改为3,以此类推。
- @echo off
- for %%a in (data.rar) do (
- if not exist "%%~na.txt" (
- echo "%%~na.txt"
- ) else (
- if not exist "%%~na (2).txt" (
- echo "%%~na (2).txt"
- ) else (
- echo "%%~na (3).txt"
- )
- )
- )
- pause>nul
复制代码
临时解决的笨方法。如果要判断到99,这要写99次。有没有简单一点的方法?
作者: 523066680 时间: 2010-9-19 23:12
学习变量的处理,还有循环控制结构。
就可以了
现在写批处理不取巧了,大概就这样吧
- @echo off
- set name=test
- if not exist "%name%.txt" (
- echo "%name%.txt"
- pause
- exit
- )
- ::同名文件存在,那么开始编号:
- set i=1
- :a
- if exist "%name%%i%" (
- set /a i+=1
- goto :a
- )
-
- echo %name%%i%.txt
- pause
复制代码
[ 本帖最后由 523066680 于 2010-9-19 23:15 编辑 ]
作者: ttenma 时间: 2010-9-20 00:46
- @echo off
- for %%a in (*.rar) do (
- if not exist "%%~na.txt" (
- echo "%%~na.txt"
- ) else (
- set i=2
- :a
- if exist "%%~na (%i%).txt" (
- set /a i+=1
- goto :a
- )
- echo "%%~na (%i%).txt"
- )
- )
- pause>nul
复制代码
多文件批量处理的,希望得到的是下面的结果,哪里出错了?
[attach]2979[/attach]
作者: batman 时间: 2010-9-20 08:22 标题: 回复 3楼 的帖子
for中能用goto循环?
作者: ttenma 时间: 2010-9-21 18:11
>4
多文件处理要用到for
这没办法解决?
作者: Batcher 时间: 2010-9-21 20:23 标题: 回复 5楼 的帖子
提出来,放到外面。
2015-09-29 在QQ群里面看到有人提问,用这个思路解决了问题,特此记录。- @echo off
- setlocal enabledelayedexpansion
- set /p "zf= 输入字符(如 *.txt;a*.txt;???s.*):"
- set /p "lj= 设置你要备份的路径(如 c:\):"
- echo 正在全盘搜索......
- md "%lj%"
- 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 (
- echo 正在处理 %%a:\
- if exist %%a:\ (
- for /f "tokens=*" %%i in ('dir /a /b /s "%%a:\%zf%"') do (
- if exist "%lj%\%%~nxi" (
- call :GetNewName "%%~nxi"
- echo f | xcopy /h /y "%%i" "%lj%\!NewFile!"
- ) else (
- xcopy /h /y "%%i" "%lj%\"
- )
- )
- )
- )
-
- :GetNewName
- set "name=%~n1"
- set "ext=%~x1"
- set n=1
- :LoopName
- if exist "%lj%\%name%_!n!%ext%" (
- set /a n+=1
- goto :LoopName
- )
- set NewFile=%name%_!n!%ext%
复制代码
作者: ttenma 时间: 2010-9-23 23:17
- @echo off
-
- for %%a in (*.rar) do (
- if not exist "%%~na.txt" (
- echo "%%~na.txt"
- ) else (
- set name=%%~na
- goto :a
- )
- )
- pause&exit
-
- :a
- set i=2
- :plus
- if exist "%name% (%i%).txt" (
- set /a i+=1
- goto:plus
- )
- echo "%name% (%i%).txt"
- pause
复制代码
不能批量处理了呢。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |