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

学习批处理修改文件名笔记

[复制链接]
发表于 2007-11-21 09:33:36 | 显示全部楼层 |阅读模式
朋友知道我学P,说又一个文件夹又一堆 莲花争霸1[tudou.com].3gp的视频
他希望改为  莲花争霸1.3gp
于是开始了批重命名文件名的过程
首先,决定用 for /d来遍历目录
但是发现总是失败
哎····原来 for /d是遍历文件夹的,不能是文件
接着,用for /r 哈哈
这下应该可以了吧
于是有了下面的代码
  1. @echo off & setlocal enabledelayedexpansion
  2. for /r e:\1 %%a in (*.3gp) do ( set str=%%a
  3. set str1=!str:[tudou.com]=!
  4. pause
  5. ren !str! !str1!
  6. )
复制代码
晕。错误了。
查了下ren的用法
发现原理是ren错误
于是有了下面的代码
  1. @echo off & setlocal enabledelayedexpansion
  2. for /r e:\1 %%a in (*.3gp) do ( set str=%%a
  3. set str1=!str:[tudou.com]=!
  4. set str2=!str1:e:\1\=!
  5. echo !str! & echo !str2!
  6. pause
  7. ren !str! !str2!
  8. pause
  9. )
复制代码
哈哈,成功了。赶快发代码给朋友。(*^__^*) 嘻嘻……
发现很多细节的东西要等到用的时候才能够发现
以后要多多练习
呵呵

[ 本帖最后由 novaa 于 2007-11-21 16:23 编辑 ]
发表于 2007-11-21 16:52:27 | 显示全部楼层
进步很快啊。不错。还需继续努力
解决问题,办法有多个,再给你个简单的。
注意:重命名文件或文件夹时,最好养成给文件路径加引号的习惯,防止文件名或路径有空格。
  1. @echo off
  2. for /f "tokens=1* delims=[" %%a in ('dir/b *.3gp') do (
  3. echo ren "%%a[%%b"   "%%a%%~xb"
  4. )
  5. pause
复制代码
 楼主| 发表于 2007-11-21 21:52:31 | 显示全部楼层
嗯。以后注意加 "  "
不过那个 "%%a%%~xb"能否解释一下
 楼主| 发表于 2007-11-21 22:48:40 | 显示全部楼层
在for里面的东西找到了
  1. 另外,FOR 变量参照的替换已被增强。您现在可以使用下列
  2. 选项语法:

  3. ~I - 删除任何引号("),扩充 %I
  4. %~fI - 将 %I 扩充到一个完全合格的路径名
  5. %~dI - 仅将 %I 扩充到一个驱动器号
  6. %~pI - 仅将 %I 扩充到一个路径
  7. %~nI - 仅将 %I 扩充到一个文件名
  8. %~xI - 仅将 %I 扩充到一个文件扩展名
  9. %~sI - 扩充的路径只含有短名
  10. %~aI - 将 %I 扩充到文件的文件属性
  11. %~tI - 将 %I 扩充到文件的日期/时间
  12. %~zI - 将 %I 扩充到文件的大小
  13. %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充
  14. 到找到的第一个完全合格的名称。如果环境变量名
  15. 未被定义,或者没有找到文件,此组合键会扩充到
  16. 空字符串

  17. 可以组合修饰符来得到多重结果:

  18. %~dpI - 仅将 %I 扩充到一个驱动器号和路径
  19. %~nxI - 仅将 %I 扩充到一个文件名和扩展名
  20. %~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
  21. %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
  22. 到找到的第一个驱动器号和路径。
  23. %~ftzaI - 将 %I 扩充到类似输出线路的 DIR

  24. 在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
  25. 用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
  26. 比较易读,而且避免与不分大小写的组合键混淆。
复制代码

下面是我的测试代码
1.txt的内容为
fjikgfdg[df].bat
dfdfsd[fdf].batl
我的测试代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1* delims=[" %%a in (1.txt) do (set var1="%%~xb"
  4. echo %%a & echo %%b & echo !var1!
  5. )
  6. pause
复制代码

结果为:
  1. fjikgfdg[df]
  2. fjikgfdg[df]
  3. bat
  4. ""
  5. dfdfsd[fdf]
  6. dfdfsd[fdf]
  7. batl
复制代码

哈哈
这个的意思也就是把后面格式为****.*的格式为.*的取出来,不管前面的为什么内容
呵呵
这个用法就大概知道了
发表于 2009-6-1 18:45:57 | 显示全部楼层

回复 1楼 的帖子

请问这段代码里的!是什么意思啊set str1=!str:[tudou.com]=!
发表于 2011-4-23 14:21:12 | 显示全部楼层
5# shenye08


set str1=!str:[tudou.com]=!
rem 将变量str1中的[tudou.com]取消掉(赋值为空)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 06:04 , Processed in 0.019968 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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