Board logo

标题: [文本处理] 【已解决】批处理如何批量更改文件名? [打印本页]

作者: xushaolong2009    时间: 2009-4-11 19:54     标题: 【已解决】批处理如何批量更改文件名?

周末买了本  批处理命令在windows操作中的典型应用 一书,里面有个实例,讲的是:
  利用下载软件批量下载文件时,偶尔会出现下载到本地的文件丢失了扩展名,如果一个个改,麻烦,如是就给个批处理
  1.   @echo off
  2.    echo    开始更改文件名……
  3.   set extension=.rar
  4.   set /a sum=0
  5.   for %%m in (*) do (
  6.   if not "%%m"=="s.bat"(
  7.   ren %%m %%m%extension%
  8.   set /a sum=sum+1
  9.   )
  10.   )
  11.   echo 文件改名完毕,一共有%sum%个文件被改名!
  12. pause
  13. set sum=
  14. set extension=
  15.   
复制代码
于是自己就手动创建了个文件夹,里面尽是些没有扩展名的文件,可是把文件运行了下,窗口只是闪了下,没了。接着我做了下修改
  1.   @echo off &setlocal enabledelayedestension
  2. echo    开始更改文件名……
  3.   set extension=.rar  
  4.   set /a sum=0
  5.   for %%m in (*) do (
  6.   if not "%%m"=="s.bat"(
  7.   ren %%m %%m%extension%
  8.   set /a sum=sum+1
  9.   )
  10.   )
  11.   echo 文件改名完毕,一共有%sum%个文件被改名!
  12. pause
  13.   
复制代码
还是没用
这是咋的了,心中大呼又是本没啥用的书

[ 本帖最后由 xushaolong2009 于 2009-4-11 21:29 编辑 ]
作者: Batcher    时间: 2009-4-11 20:07

  1. @echo off
  2. echo 开始更改文件名……
  3. set extension=.rar
  4. set sum=0
  5. for %%m in ("C:\test\batcher\*.*") do (
  6.   ren "%%m" "%%~nxm%extension%"
  7.   set /a sum+=1
  8. )
  9. echo 文件改名完毕,一共有%sum%个文件被改名!
  10. pause
复制代码

作者: 随风    时间: 2009-4-11 20:13

代码是没问题的,你犯了个错误
1、 批处理中有些空格是不能随便省略的 if not "%%m"=="s.bat" (    半括弧前面有个空格不能省略
2、最好给文件名加上引号,以防止文件名含空格时出错
   如: ren "%%m" "%%m%extension%"
3、if not "%%m"=="s.bat" 这句的意识不改批处理自身的名,如果你的批处理不是s.bat的话,有可能中途会把自身改了名导致代码出错。
作者: xushaolong2009    时间: 2009-4-11 21:04     标题: 心得

谢谢楼上的回答,原来是空格在作怪,这时才发现hero大大教程的那个 罪恶的空格 不是多余的,看来自己要学习的还有许多
5楼的大大,分析很详细,这让我想到了一个大大,非常批处理的那个清风。小声嘀咕下,是不是一个人,分格很像
2楼的调式不出来的,后来把 . 改为 * , if not "%%m"=="s.bat" (    半括弧前面有个空格不能省略(盗用清风大大的,嘿),运行下成功了,不过连源批处理也改了。
也非常感谢4楼的大大,弱弱的说声好像调试不出来的,别生气哦!(*^__^*) 嘻嘻……
  为了以后再有人犯次错误,我就把根据清风大大提示后调试正确的代码写出来,
  1. @echo off
  2.    echo    开始更改文件名……
  3.   set extension=.rar
  4.   set /a sum=0
  5.   for %%m in (*) do (
  6.   if not "%%m"=="s.bat" (
  7.   ren %%m %%m%extension%
  8.   set /a sum=sum+1
  9.   )
  10.   )
  11.   echo 文件改名完毕,一共有%sum%个文件被改名!
  12. pause
  13. set sum=
  14. set extension=
  15.   
复制代码
乘着人气在 ,在这里还有一个问题要问,就是前天的问题,合并。
把356个文件合并,一个id为tireless朋友给出了代码
  1. copy *.txt all.txt /b
复制代码
调式了下,发现有用,可是昨晚在打开里面时,发现了问题,里面是杂乱无章的,也就是不是按顺序来的;如果要按顺序显示的话,有没有办法解决?!

[ 本帖最后由 xushaolong2009 于 2009-4-11 21:06 编辑 ]
作者: xushaolong2009    时间: 2009-4-11 21:28     标题: 回复 7楼 的帖子

谢谢,原来前面的那个代码没错,是我错了,看来自己以后要细心了。也谢谢tireless
作者: 随风    时间: 2009-4-11 21:35     标题: 回复 6楼 的帖子

首先请不要在一个帖里问与主题帖无关的问题,有问题请新开一帖。
.
4楼的代码为什么调试不出来,请说明具体情况。(这也是对给你帮助的人的尊重)
.
5楼的大大,分析很详细,这让我想到了一个大大,非常批处理的那个清风。小声嘀咕下,是不是一个人,分格很像

答:你认错人了。
作者: xushaolong2009    时间: 2009-4-11 23:17     标题: 回复 9楼 的帖子

真是不好意思,作为新手可能多多少少要犯些错(狡辩ing),请见谅。
不知怎么地,刚开始时,4楼的调试不出来,刚刚认真看了大大的帖子,又调试了下,成功了,可能是刚刚糊涂了,坐在电脑前差不多看了一天的批处理教程,糊涂了吧(狡辩ing)。
结果还有个小疑问,能否让四楼的代码运行后不把自己后面就后缀???
作者: Batcher    时间: 2009-4-11 23:22     标题: 回复 10楼 的帖子

两个方法:
1、不要把批处理和那些需要改名的文件放在同一个文件夹里面
2、仿照书上的方法修改4楼的代码(用if排除批处理文件自身)
作者: 随风    时间: 2009-4-11 23:25

结果还有个小疑问,能否让四楼的代码运行后不把自己后面就后缀???
真佩服 batcher 我看了半天,硬是没看懂这句话的意识。
作者: xushaolong2009    时间: 2009-4-11 23:28     标题: 回复 12楼 的帖子

嘿嘿,打错字了,是加后缀,嘿嘿。(汗……)




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2