Board logo

标题: [文本处理] [已解决]批处理BAT批量重命名文件名为何少了一个字符? [打印本页]

作者: 520-doraemon    时间: 2014-5-15 17:43     标题: [已解决]批处理BAT批量重命名文件名为何少了一个字符?

    我这几天刚学批处理,想写一个批量重命名的批处理,结果没有弄好,请各位大侠帮我看看问题出在哪儿?
    我想在一个文件夹内几个后缀不同的文件前加上同样的字符,比如:123,我写的批处理是这样的“ren -*.??? 123-*.???”,结果加的文字是加上去的,但是奇怪的事也出来了,所有文件名相相应的从前到后少了一个字符。也就是说删掉了不该删的字符,这是怎么回事呢?
    可能有有人说你太懒了,应该把不同类型的文件分开来操作分开操作我也试了,也是一样的。我之所以写得这么简单是因为每次在文件名前增加的字符都不一样,所以修改的内容最好尽可能少一点比较好。
     解决方法请看三楼
DAIC写的代码和6楼我的回复。

下面的是我写的批处理和示例文件:
作者: hlzj88    时间: 2014-5-15 18:50

http://www.bathome.net/viewthread.php?tid=3344&highlight=

请阅读
作者: DAIC    时间: 2014-5-15 19:56

通配符的方法是不可靠的,建议这样做:
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d') do (
  3.     if "%%i" neq "%0" (
  4.         ren "%%i" "123%%i"
  5.     )
  6. )
复制代码

作者: 520-doraemon    时间: 2014-5-16 09:42

非常感谢大侠出手相助,不怕各位笑话,你的这这段批处理我真的看不懂,不过我已经验证你的批处理,完全可以达到我说的要求,真神啊!
作者: 520-doraemon    时间: 2014-5-16 10:49

回复 3# DAIC


我想在对文件夹内的文件重命名完了以后自动删除这个批处理,用了好几种方法都没有实现,例如添加代码: & del *.bat;>del *.bat ;goto del *.bat
这是为什么呢?
作者: 520-doraemon    时间: 2014-5-16 17:07

     在添加删除批处理功能时,我先将“& del *.bat”直接加在了反括号的后面,运行批处理后只是修改了文件名,却不能删除批处理,后来发现“()”内的命令具有优先执行权,我就将“& del *.bat”两个反括号内,结果成功了。
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d') do (
  3.     if "%%i" neq "%0" (
  4.         ren "%%i" "YCCB126%%i" & del *.bat )
  5. )
复制代码


作者: DAIC    时间: 2014-5-16 20:41

本帖最后由 DAIC 于 2014-5-18 20:04 编辑

回复 6# 520-doraemon
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d') do (
  3.     if "%%i" neq "%0" (
  4.         ren "%%i" "123%%i"
  5.     )
  6. )
  7. del /f /q "%~f0"
复制代码

作者: 520-doraemon    时间: 2014-5-18 16:59

回复  520-doraemon
DAIC 发表于 2014-5-16 20:41


经试验你这次的代码不能实现对文件夹内的文件重命名完了以后自动删除这个批处理的功能,上面有修改的可以。
作者: DAIC    时间: 2014-5-18 20:05

回复 8# 520-doraemon


    少了个字符,已修改,你再试试。
作者: 520-doraemon    时间: 2014-5-19 08:42

回复 9# DAIC

我试了还是不行啊
作者: DAIC    时间: 2014-5-19 11:36

回复 10# 520-doraemon


    我也试了,行。
作者: 520-doraemon    时间: 2014-5-19 13:36

回复  520-doraemon


    我也试了,行。
DAIC 发表于 2014-5-19 11:36


我反复试验了几次,还是不行,不知是不是对批处理本身这个文件的文件名有什么要求?如果没有要求最好有第三个人验证一下,得出一个结论比较好!
因为也有可能是我们的系统环境不一样造成的问题。
作者: lyd68201    时间: 2014-8-1 10:42

回复 3# DAIC


    请教高手一个问题,批量重命名文件名为父文件夹名字 加序号的时候由于我的文件夹名字也是数字的,为了避免到时导入EXCEL 时出现误删,请问如何加成(1)(2)这种,以下是代码:
@echo off&SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%a in ('dir /b/ad') do (
  cd %%a
  set n=100
  for /f "tokens=*" %%b in ('dir /b/a-d') do (
  set /a n+=1
  ren "%%b" "%%a!n:~1!%%~xb"
  )
  cd..
  )
作者: CrLf    时间: 2014-8-1 18:04

回复 7# DAIC


个人比较喜欢暴力一点的写法...
  1. @echo off
  2. (for /f "delims=" %%i in ('dir /b /a-d') do (
  3.      ren "%%i" "123%%i"
  4. )) <%0 2>nul
复制代码

作者: apang    时间: 2014-8-1 20:22

回复 7# DAIC


    %0 带路径,%%i 不带路径,两者应该不相等吧
作者: pan528    时间: 2014-8-2 19:14

回复 12# 520-doraemon

确实删除不了,“del /f /q "%~f0"”是强制删除批命令本身,但上述几行命令运行后,批命令已被改为123+原名,因此,“del /f /q "%~f0"”,不能工作。但我不知道怎样才能改过来。
作者: pan528    时间: 2014-8-2 19:15

回复 7# DAIC


确实删除不了,“del /f /q "%~f0"”是强制删除批命令本身,但上述几行命令运行后,批命令已被改为123+原名,因此,“del /f /q "%~f0"”,不能工作。但我不知道怎样才能改过来。
作者: DAIC    时间: 2014-8-3 08:36

回复 17# pan528
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d') do (
  3.     if "%%i" neq "%~nx0" (
  4.         ren "%%i" "123%%i"
  5.     )
  6. )
  7. del /f /q "%~f0"
复制代码

作者: pan528    时间: 2014-8-3 23:11

回复 18# DAIC

谢谢指点,一个“%~nx0”改得巧妙!这样就把批命令格式排除了,而且自身特指性更强了。




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