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

[文件操作] [已解决]批处理怎样在文件名中的数字前加上0/补零/补0?

[复制链接]
发表于 2011-9-28 13:12:41 | 显示全部楼层 |阅读模式
本帖最后由 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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-9-28 14:51:06 | 显示全部楼层
for /l %%a in (1 1 9) do ren 小说%%a.txt 小说0%%a.txt
 楼主| 发表于 2011-9-28 15:20:12 | 显示全部楼层
回复 2# CrLf


    多谢版主!
不过我这只是举个例子,还有其他一些文件,数字有的在前有的在后,还有的数字是从1到几百,不知道您能不能写一个通用版的。
再次感谢版主!!
发表于 2011-9-28 15:57:01 | 显示全部楼层
本帖最后由 ArdentMan 于 2011-9-28 15:58 编辑

以下代码在数字三位内通用:

  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. For /F "delims=" %%a In ('Dir /b /s') Do (
  3.   For /F "delims=0123456789" %%b In ("%%~na") Do Call :LP "%%a" "%%b"
  4. )
  5. Exit
  6. :LP
  7. For /F "delims=%~2" %%a In ("%~n1") Do (
  8.   Set "Num=000%%a"&Set "Num=!Num:~-3!"
  9.   For %%b In (!Num!) Do Set "Str=%~n1"&Ren %1 "!Str:%%a=%%b!"
  10. )
复制代码
 楼主| 发表于 2011-9-28 16:59:25 | 显示全部楼层
回复 4# ArdentMan

多谢前辈!!
我测试了一下,确实不错!!
但是有点小bug,下面这种文件名的改不了:
1  ee.txt
1e  e.txt
1.txt
e  e1.txt
发表于 2011-9-28 17:02:55 | 显示全部楼层
回复 5# QIAOXINGXING


请别人写代码之前,你得自己先把规律总结出来。
什么东西都没有,只是说别人的代码不通用,这怎么可以呢。
1a1.txt、1a12b123.txt这样的文件你准备怎样重命名?
发表于 2011-9-28 17:32:05 | 显示全部楼层
本帖最后由 ArdentMan 于 2011-9-28 17:34 编辑

请测试:

  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. For /F "delims=" %%a In ('Dir /b /s') Do (
  3.   Set "Str=%%~na"
  4.   For /L %%b In (0,1,9) Do Set "Str=!Str:%%b=!"
  5.   Call :LP "%%a" "@!Str!"
  6. )
  7. Exit
  8. :LP
  9. For /F "delims=%~2" %%a In ("%~n1") Do (
  10.   Set "Num=000%%a"&Set "Num=!Num:~-3!"
  11.   For %%b In (!Num!) Do Set "Str=%~n1"&Ren %1 "!Str:%%a=%%b!"
  12. )
复制代码
 楼主| 发表于 2011-9-28 20:10:05 | 显示全部楼层
本帖最后由 QIAOXINGXING 于 2011-9-28 20:12 编辑

回复 6# HAT


    前辈教训的是,我一定尽量改正。只是现在我实在太菜了,稍复杂的语句就看不懂了。。
发表于 2011-9-28 20:27:41 | 显示全部楼层
回复 8# QIAOXINGXING


看不懂没关系,把需求描述清楚就行了,会有人帮你写代码的。
 楼主| 发表于 2011-9-28 21:32:02 | 显示全部楼层
回复 9# HAT


再次感谢前辈!!
经测试,纯数字为文件名的(即:1.txt型的)可以了,但是其他几种依旧不行。
我试图看懂代码,但是。。。。。。。。只能麻烦前辈了。
发表于 2011-9-28 23:44:26 | 显示全部楼层
本帖最后由 ArdentMan 于 2011-9-28 23:51 编辑

这下应该可以了

  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. For /F "delims=" %%a In ('Dir /b /s') Do (
  3.   Set "Str=%%~na"
  4.   For /L %%b In (0,1,9) Do If Defined Str Set "Str=!Str:%%b=!"
  5.   If Not Defined Str Set "Str=<"
  6.   If "%%a" NEQ %0 Call :LP "%%a" "!Str: =!"
  7. )
  8. Exit
  9. :LP
  10. For /F "delims=%~2 " %%a In ("%~n1") Do (
  11.   Set "Num=000%%a"&Set "Num=!Num:~-3!"
  12.   For %%b In (!Num!) Do Set "Str=%~nx1"&Ren %1 "!Str:%%a=%%b!"
  13. )
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2011-9-29 04:57:33 | 显示全部楼层
膜拜各路大牛。。。。 学习中。
 楼主| 发表于 2011-9-29 11:29:48 | 显示全部楼层
回复 11# ArdentMan


    实在感谢,的确可以了。
感激不尽啊!!!
发表于 2016-7-15 20:20:54 | 显示全部楼层
本帖最后由 pcl_test 于 2016-7-15 20:34 编辑
  1. /*&cls
  2. @echo off
  3. rem 以文件名中自左向右首个出现的数字串为修改对象
  4. dir /a-d /b *.txt|cscript -nologo -e:jscript "%~f0"
  5. pause&exit
  6. */

  7. var fso = new ActiveXObject('Scripting.FileSystemObject');
  8. var f=[], i=0, zero='00000000000000000000', t;
  9. while(!WSH.StdIn.AtEndOfStream){
  10.     var file = fso.GetFile(WSH.StdIn.ReadLine());
  11.     //获取数字串最长位数
  12.     if(/\D*(\d+).+/.test(file.Name)){
  13.         if(typeof(n) == 'undefined'){
  14.             n = RegExp.$1.length
  15.         }else{
  16.             if(RegExp.$1.length > n)n=RegExp.$1.length;
  17.         }
  18.         f[i] = file;
  19.         i++;
  20.     }
  21. }

  22. for(i--; i>=0; i--){
  23.     var newname = f[i].Name.replace(/\d+/, function(num){t = num.length;return (zero+num).slice(-n)});
  24.     if(t < n)f[i].Name = newname;
  25. }
  26. WSH.echo('Done');
复制代码
发表于 2020-3-12 15:38:11 | 显示全部楼层
回复 14# pcl_test

版主的这个代码太好了!
我增加了一些适配的文件格式,代码执行提升出错,但是不影响结果。请帮忙看看是什么导致?该如何添加文件格式才不会出错?谢谢!!
  1. 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' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
文件名、目录名或卷标语法不正确。
命令语法不正确。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 15:48 , Processed in 0.024648 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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