标题: [文件操作] [已解决]批处理怎样在文件名中的数字前加上0/补零/补0? [打印本页]
作者: QIAOXINGXING 时间: 2011-9-28 13:12 标题: [已解决]批处理怎样在文件名中的数字前加上0/补零/补0?
本帖最后由 pcl_test 于 2016-7-15 18:13 编辑
把文件名的数字改成相同的位数,举个例子
有一些文件的名字是:小说1.txt 小说2.txt 小说3.txt ...............小说23.txt 小说24.txt
怎么用批处理改成 :小说01.txt 小说02.txt 小说03.txt ...............小说23.txt 小说24.txt
作者: CrLf 时间: 2011-9-28 14:51
for /l %%a in (1 1 9) do ren 小说%%a.txt 小说0%%a.txt
作者: QIAOXINGXING 时间: 2011-9-28 15:20
回复 2# CrLf
多谢版主!
不过我这只是举个例子,还有其他一些文件,数字有的在前有的在后,还有的数字是从1到几百,不知道您能不能写一个通用版的。
再次感谢版主!!
作者: ArdentMan 时间: 2011-9-28 15:57
本帖最后由 ArdentMan 于 2011-9-28 15:58 编辑
以下代码在数字三位内通用:- @Echo Off&SetLocal EnableDelayedExpansion
- For /F "delims=" %%a In ('Dir /b /s') Do (
- For /F "delims=0123456789" %%b In ("%%~na") Do Call :LP "%%a" "%%b"
- )
- Exit
- :LP
- For /F "delims=%~2" %%a In ("%~n1") Do (
- Set "Num=000%%a"&Set "Num=!Num:~-3!"
- For %%b In (!Num!) Do Set "Str=%~n1"&Ren %1 "!Str:%%a=%%b!"
- )
复制代码
作者: QIAOXINGXING 时间: 2011-9-28 16:59
回复 4# ArdentMan
多谢前辈!!
我测试了一下,确实不错!!
但是有点小bug,下面这种文件名的改不了:
1 ee.txt
1e e.txt
1.txt
e e1.txt
作者: HAT 时间: 2011-9-28 17:02
回复 5# QIAOXINGXING
请别人写代码之前,你得自己先把规律总结出来。
什么东西都没有,只是说别人的代码不通用,这怎么可以呢。
1a1.txt、1a12b123.txt这样的文件你准备怎样重命名?
作者: ArdentMan 时间: 2011-9-28 17:32
本帖最后由 ArdentMan 于 2011-9-28 17:34 编辑
请测试:- @Echo Off&SetLocal EnableDelayedExpansion
- For /F "delims=" %%a In ('Dir /b /s') Do (
- Set "Str=%%~na"
- For /L %%b In (0,1,9) Do Set "Str=!Str:%%b=!"
- Call :LP "%%a" "@!Str!"
- )
- Exit
- :LP
- For /F "delims=%~2" %%a In ("%~n1") Do (
- Set "Num=000%%a"&Set "Num=!Num:~-3!"
- For %%b In (!Num!) Do Set "Str=%~n1"&Ren %1 "!Str:%%a=%%b!"
- )
复制代码
作者: QIAOXINGXING 时间: 2011-9-28 20:10
本帖最后由 QIAOXINGXING 于 2011-9-28 20:12 编辑
回复 6# HAT
前辈教训的是,我一定尽量改正。只是现在我实在太菜了,稍复杂的语句就看不懂了。。
作者: HAT 时间: 2011-9-28 20:27
回复 8# QIAOXINGXING
看不懂没关系,把需求描述清楚就行了,会有人帮你写代码的。
作者: QIAOXINGXING 时间: 2011-9-28 21:32
回复 9# HAT
再次感谢前辈!!
经测试,纯数字为文件名的(即:1.txt型的)可以了,但是其他几种依旧不行。
我试图看懂代码,但是。。。。。。。。只能麻烦前辈了。
作者: ArdentMan 时间: 2011-9-28 23:44
本帖最后由 ArdentMan 于 2011-9-28 23:51 编辑
这下应该可以了- @Echo Off&SetLocal EnableDelayedExpansion
- For /F "delims=" %%a In ('Dir /b /s') Do (
- Set "Str=%%~na"
- For /L %%b In (0,1,9) Do If Defined Str Set "Str=!Str:%%b=!"
- If Not Defined Str Set "Str=<"
- If "%%a" NEQ %0 Call :LP "%%a" "!Str: =!"
- )
- Exit
- :LP
- For /F "delims=%~2 " %%a In ("%~n1") Do (
- Set "Num=000%%a"&Set "Num=!Num:~-3!"
- For %%b In (!Num!) Do Set "Str=%~nx1"&Ren %1 "!Str:%%a=%%b!"
- )
复制代码
作者: missll 时间: 2011-9-29 04:57
膜拜各路大牛。。。。 学习中。
作者: QIAOXINGXING 时间: 2011-9-29 11:29
回复 11# ArdentMan
实在感谢,的确可以了。
感激不尽啊!!!
作者: pcl_test 时间: 2016-7-15 20:20
本帖最后由 pcl_test 于 2016-7-15 20:34 编辑
- /*&cls
- @echo off
- rem 以文件名中自左向右首个出现的数字串为修改对象
- dir /a-d /b *.txt|cscript -nologo -e:jscript "%~f0"
- pause&exit
- */
-
- var fso = new ActiveXObject('Scripting.FileSystemObject');
- var f=[], i=0, zero='00000000000000000000', t;
- while(!WSH.StdIn.AtEndOfStream){
- var file = fso.GetFile(WSH.StdIn.ReadLine());
- //获取数字串最长位数
- if(/\D*(\d+).+/.test(file.Name)){
- if(typeof(n) == 'undefined'){
- n = RegExp.$1.length
- }else{
- if(RegExp.$1.length > n)n=RegExp.$1.length;
- }
- f[i] = file;
- i++;
- }
- }
-
- for(i--; i>=0; i--){
- var newname = f[i].Name.replace(/\d+/, function(num){t = num.length;return (zero+num).slice(-n)});
- if(t < n)f[i].Name = newname;
- }
- WSH.echo('Done');
复制代码
作者: ddrwin 时间: 2020-3-12 15:38
回复 14# pcl_test
版主的这个代码太好了!
我增加了一些适配的文件格式,代码执行提升出错,但是不影响结果。请帮忙看看是什么导致?该如何添加文件格式才不会出错?谢谢!!- dir /a-d /b *.txt *.rar *.pdf *.doc *.mov *.torrent *.jpg *.mp4 *.ts *.mkv *.wmv *.avi *.png *.gif *.rmvb|cscript -nologo -e:jscript "%~f0"
复制代码
运行结果:
Done
'*' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'var' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'var' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'while' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'var' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
文件名、目录名或卷标语法不正确。
命令语法不正确。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |