标题: [文本处理] [已解决]批处理如何把txt文本按照顺序把没有的修改递补上? [打印本页]
作者: wslqy 时间: 2011-7-17 14:13 标题: [已解决]批处理如何把txt文本按照顺序把没有的修改递补上?
问个问题,一个文件夹里面有1---200左右的文本,1.txt,2.txt,5.txt......,如何按照顺序把没有的修改递补上:1.txt,2.txt,3.txt,也就是说,把5.txt的递修改为3.txt以此类推
作者: 0428_hai 时间: 2011-7-17 14:20
- @echo off
- SETLOCAL ENABLEDELAYEDEXPANSION
- ::本批处理功能为将当前文件夹下所有以阿拉伯数字命名的文本文件“按序”排列
- ::注意事项:当前文件夹中的文本文件名必须为阿拉伯数字,数字之间不允许空格
- ::当然可以根据自己的需求继续完善
- set max=1
- for %%a in (*.txt) do (
- set %%~na=%%~na
- if !max! lss %%~na set max=%%~na
- set /a cnt+=1
- )
-
- for /l %%a in (1,1,%cnt%) do (
- if defined %%a (
- set %%a=
- ) else (
- set _tmp=%%a
- call :reName %%a
- )
- )
- echo done......
- pause>nul
- exit
-
- :reName
- for /l %%a in (1,1,%max%) do (
- set /a _tmp+=1
- if defined !_tmp! (
- echo ren !_tmp!.txt %1.txt
- set !_tmp!=
- pause>nul
- goto :eof
- )
- )
复制代码
作者: wslqy 时间: 2011-7-17 14:21
多谢0428_hai 大师的帮助
作者: CUer 时间: 2011-7-17 14:21
- @echo off
- setlocal enabledelayedexpansion
- set num=1000
- for /f %%a in ('dir /b *.txt') do (
- set /a num+=1
- ren %%a !num!.txt
- )
- for /f %%a in ('dir /b *.txt') do (
- set /a newname=%%~na%%1000
- ren %%a !newname!.txt
- )
复制代码
作者: wslqy 时间: 2011-7-17 14:27
CUer 的代码文本名称是可以改变,但文本的时间属性被重新排列了
作者: CUer 时间: 2011-7-17 14:30
5# wslqy
没看到你顶楼有这个需求啊
作者: wslqy 时间: 2011-7-17 14:31
不过还是要感谢大家对我的帮助,再次谢谢大家
作者: wslqy 时间: 2011-7-17 14:33
不好意思,无法把要的结果截图到这里面来,非常抱歉
作者: ArdentMan 时间: 2011-7-17 14:38
- @Echo Off&SetLocal EnableDelayedExpansion
- For /F "delims=" %%i In ('Dir /od /b *.txt') Do (
- If Not Defined Num (
- Set /A Num=%%~ni
- ) Else (
- Set /A Num+=1
- If !Num! NEQ %%~ni Ren %%i !Num!.txt
- )
- )
复制代码
作者: wslqy 时间: 2011-7-17 14:42
不是像我刚刚截图要的结果
作者: wslqy 时间: 2011-7-17 14:45
2楼和9楼使用效果都一样,很好很不错
作者: wslqy 时间: 2011-7-17 14:54
所有的问题已经解决,再次谢谢各位大师
作者: 0428_hai 时间: 2011-7-17 14:57
如下图所示,不知为何我测试时,程序最后把编号编到242了,而我的txt文本只有50个啊
作者: ArdentMan 时间: 2011-7-17 15:15
13# 0428_hai
是因为你最小序号的文本文件的创建时间不是最早的~~~~
作者: 0428_hai 时间: 2011-7-17 15:49
是的。
对于楼主的实际应用,看来用dir/o-d的排序效果就达到要求了。
我用于测试所创建的文本文件创建时间几乎全都一样吧,对于实际情况没有什么意义了。
只是对于这种“特殊情况”不适用罢了
作者: mxxcgzxxx 时间: 2011-7-17 16:48
本帖最后由 mxxcgzxxx 于 2011-7-17 17:37 编辑
测试可用,只修改文件名为纯数字的文件,别的无视
修正数字排序错误问题
只按数字改名不按修改时间
可更改 hz参数来改变后辍
允许最大文件名8999,如果有需要可以改第五句的1000成10000就可以允许89999- @echo off
- setlocal enabledelayedexpansion
- set hz=txt
- for /f %%1 in ('dir /on /b * ^| findstr "^[0-9]*.%hz%$"') do (
- set /a a=1000+%%~n1
- set x!a!=%%1
- )
- set a=1
- for /f "tokens=2 delims==" %%1 in ('set x') do (
- ren %%1 !a!.%hz%
- set /a a+=1
- )
- echo 转换完成
- pause>nul
复制代码
作者: wslqy 时间: 2011-7-17 20:47
已经结贴,谢谢大家的关注
作者: mxxcgzxxx 时间: 2011-7-18 13:47
18# else
只用DIR是不行,我的程序要+1000就是为了防止文件名读取错误
因为系统读数字文件名时是:1,10,11,12,13...19,2,20,21...的顺序,如果这些文件是有一定顺序的重要数据文件就会被全打乱了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |