[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

下面的是我写的批处理和示例文件:
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

目的,学习批处理

TOP

通配符的方法是不可靠的,建议这样做:
  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. )
复制代码
2

评分人数

TOP

非常感谢大侠出手相助,不怕各位笑话,你的这这段批处理我真的看不懂,不过我已经验证你的批处理,完全可以达到我说的要求,真神啊!

TOP

回复 3# DAIC


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

TOP

     在添加删除批处理功能时,我先将“& 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. )
复制代码

TOP

本帖最后由 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"
复制代码

TOP

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


经试验你这次的代码不能实现对文件夹内的文件重命名完了以后自动删除这个批处理的功能,上面有修改的可以。

TOP

回复 8# 520-doraemon


    少了个字符,已修改,你再试试。

TOP

回复 9# DAIC

我试了还是不行啊

TOP

回复 10# 520-doraemon


    我也试了,行。

TOP

回复  520-doraemon


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


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

TOP

回复 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..
  )

TOP

回复 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
复制代码

TOP

回复 7# DAIC


    %0 带路径,%%i 不带路径,两者应该不相等吧

TOP

返回列表