标题: 学习批处理修改文件名笔记 [打印本页]
作者: novaa 时间: 2007-11-21 09:33 标题: 学习批处理修改文件名笔记
朋友知道我学P,说又一个文件夹又一堆 莲花争霸1[tudou.com].3gp的视频
他希望改为 莲花争霸1.3gp
于是开始了批重命名文件名的过程
首先,决定用 for /d来遍历目录
但是发现总是失败
哎····原来 for /d是遍历文件夹的,不能是文件
接着,用for /r 哈哈
这下应该可以了吧
于是有了下面的代码- @echo off & setlocal enabledelayedexpansion
- for /r e:\1 %%a in (*.3gp) do ( set str=%%a
- set str1=!str:[tudou.com]=!
- pause
- ren !str! !str1!
- )
复制代码
晕。错误了。
查了下ren的用法
发现原理是ren错误
于是有了下面的代码- @echo off & setlocal enabledelayedexpansion
- for /r e:\1 %%a in (*.3gp) do ( set str=%%a
- set str1=!str:[tudou.com]=!
- set str2=!str1:e:\1\=!
- echo !str! & echo !str2!
- pause
- ren !str! !str2!
- pause
- )
复制代码
哈哈,成功了。赶快发代码给朋友。(*^__^*) 嘻嘻……
发现很多细节的东西要等到用的时候才能够发现
以后要多多练习
呵呵
[ 本帖最后由 novaa 于 2007-11-21 16:23 编辑 ]
作者: 随风 时间: 2007-11-21 16:52
进步很快啊。不错。还需继续努力
解决问题,办法有多个,再给你个简单的。
注意:重命名文件或文件夹时,最好养成给文件路径加引号的习惯,防止文件名或路径有空格。- @echo off
- for /f "tokens=1* delims=[" %%a in ('dir/b *.3gp') do (
- echo ren "%%a[%%b" "%%a%%~xb"
- )
- pause
复制代码
作者: novaa 时间: 2007-11-21 21:52
嗯。以后注意加 " "
不过那个 "%%a%%~xb"能否解释一下
作者: novaa 时间: 2007-11-21 22:48
在for里面的东西找到了
- 另外,FOR 变量参照的替换已被增强。您现在可以使用下列
- 选项语法:
-
- ~I - 删除任何引号("),扩充 %I
- %~fI - 将 %I 扩充到一个完全合格的路径名
- %~dI - 仅将 %I 扩充到一个驱动器号
- %~pI - 仅将 %I 扩充到一个路径
- %~nI - 仅将 %I 扩充到一个文件名
- %~xI - 仅将 %I 扩充到一个文件扩展名
- %~sI - 扩充的路径只含有短名
- %~aI - 将 %I 扩充到文件的文件属性
- %~tI - 将 %I 扩充到文件的日期/时间
- %~zI - 将 %I 扩充到文件的大小
- %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充
- 到找到的第一个完全合格的名称。如果环境变量名
- 未被定义,或者没有找到文件,此组合键会扩充到
- 空字符串
-
- 可以组合修饰符来得到多重结果:
-
- %~dpI - 仅将 %I 扩充到一个驱动器号和路径
- %~nxI - 仅将 %I 扩充到一个文件名和扩展名
- %~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
- %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
- 到找到的第一个驱动器号和路径。
- %~ftzaI - 将 %I 扩充到类似输出线路的 DIR
-
- 在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
- 用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
- 比较易读,而且避免与不分大小写的组合键混淆。
复制代码
下面是我的测试代码
1.txt的内容为
fjikgfdg[df].bat
dfdfsd[fdf].batl
我的测试代码- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1* delims=[" %%a in (1.txt) do (set var1="%%~xb"
- echo %%a & echo %%b & echo !var1!
- )
- pause
复制代码
结果为:- fjikgfdg[df]
- fjikgfdg[df]
- bat
- ""
- dfdfsd[fdf]
- dfdfsd[fdf]
- batl
复制代码
哈哈
这个的意思也就是把后面格式为****.*的格式为.*的取出来,不管前面的为什么内容
呵呵
这个用法就大概知道了
作者: shenye08 时间: 2009-6-1 18:45 标题: 回复 1楼 的帖子
请问这段代码里的!是什么意思啊set str1=!str:[tudou.com]=!
作者: Hello123World 时间: 2011-4-23 14:21
5# shenye08
set str1=!str:[tudou.com]=!
rem 将变量str1中的[tudou.com]取消掉(赋值为空)
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |