标题: [文件操作] 批处理怎样批量改文件名? [打印本页]
作者: regabc 时间: 2011-4-24 10:52 标题: 批处理怎样批量改文件名?
第一个问题:
请看:
“六23一s”儿1_21_424_3童节_021.html
偶然_,回_想起_六年前那难忘的一次_132.HTML
想变成:
“六23一s”儿1_21_424_3童节.txt
偶然_,回_想起_六年前那难忘的一次.txt
如何实现?有点难度了。
第二个问题:- @echo off
- for /f "tokens=*" %%i in ('dir /b *.txt') do (
- ren %%~i wwf%%~ni.txt
- )
复制代码
上面这段改名称,居然对“New Text Document.txt”这样的名称不起作用,待我改成中文名称或者其它时,这段代码又起作用了,为什么?
作者: Commander 时间: 2011-4-24 11:02
- @echo off
- for /f "tokens=*" %%i in ('dir /b *.txt') do (
- ren "%%~i" "wwf%%~ni.txt"
- )
复制代码
作者: Commander 时间: 2011-4-24 11:06
- @echo off
- for %%a in (*.html) do (
- set "file=%%a"
- setlocal enabledelayedexpansion
- ren %%a !file:~0,-9!.txt
- endlocal
- )
复制代码
作者: regabc 时间: 2011-4-24 11:11
That's Cool!
作者: regabc 时间: 2011-4-24 11:21
Commander,不好了,代码兼容性不高,当出现这样的文件名时,改不动了。你_22好朋_232友_21782874.html,Copy of _27398你要_219.HTML。结果下来是:你_22好朋_232友_2178.txt,Copy of _27398你要_219.HTML。如何解决?
作者: CrLf 时间: 2011-4-24 11:35
本帖最后由 zm900612 于 2011-4-24 11:44 编辑
- @echo off
- for %%a in (*.html) do (
- set "file=%%a"
- setlocal enabledelayedexpansion
- for %%b in ("!file:_=\!") do (
- endlocal
- set file=%%~dpb
- setlocal enabledelayedexpansion
- )
- ren "%%a" "!file:~0,-1!.txt"
- endlocal
- )
复制代码
作者: hanyeguxing 时间: 2011-4-24 11:38
本帖最后由 hanyeguxing 于 2011-4-24 11:47 编辑
- @echo off&setlocal enableDelayedExpansion
- for %%a in (*.html) do (
- set "n=%%~na"
- for %%b in ("!n:_=\!") do (
- set "n=%%~pb"
- set "n=!n:\=_!"
- ren "%%a" "!n:~1,-1!.txt"
- ))
复制代码
或:- @echo off&setlocal enableDelayedExpansion
- for %%a in (*.html) do (
- set "n=%%~na"
- set "n=!n:.=$!"
- for %%b in ("!n:_=.!") do (
- set "n=%%~nb"
- set "n=!n:.=_!"
- ren "%%a" "!n:$=.!.txt"
- ))
复制代码
注意:$为文件名中没有的字符
作者: CrLf 时间: 2011-4-24 12:29
7# hanyeguxing
哦,我忘了把变量改回来
作者: Hello123World 时间: 2011-4-24 13:26
本帖最后由 Hello123World 于 2011-4-24 13:32 编辑
1# regabc
第一个:
放在文件所在目录- setlocal EnableDelayedExpansion
- for /r %%i in (*.html) do (set a=%%i
- ren "%%i" "!a:~0,-4!.txt")
复制代码
第二个:- @echo off
- for /f "tokens=*" %%i in ('dir /b *.txt') do (
- ren "%%~i" "wwf%%~nxi"
- )
复制代码
不管什么时候都要为有空格的路径或者文件名加上双引号,因为空格是批处理的默认分隔符。
作者: Hello123World 时间: 2011-4-24 13:53
7# hanyeguxing
第一个代码是怎么实现了,理解不了- @echo off
- @echo off&setlocal enableDelayedExpansion
- for %%a in (*.html) do (
- set "n=%%~na"
- echo !n!
- pause
- for %%b in ("!n:_=\!") do (
- set "n=%%~pb"
- echo !n!
- pause
- set "n=!n:\=_!"
- echo !n!
- pause
- ren "%%a" "!n:~1,-1!.txt"
- echo %%a
- echo !n:~1,-1!
- ))
- pause
复制代码
停顿的回显也是理解不了,- 偶然_,回_想起_六年前那难忘的一次_132
- 请按任意键继续. . .
- \hello\偶然\,回\想起\六年前那难忘的一次\
- 请按任意键继续. . .
- _hello_偶然_,回_想起_六年前那难忘的一次_
- 请按任意键继续. . .
- 偶然_,回_想起_六年前那难忘的一次_132.HTML
- hello_偶然_,回_想起_六年前那难忘的一次
- 请按任意键继续. . .
复制代码
把_换成路径\,路径\最后又换回_,最后重名也达不到效果啊。回显也是这么表示的,但实际却实现效果了。
为什么?
作者: Hello123World 时间: 2011-4-24 13:54
本帖最后由 Hello123World 于 2011-4-24 14:16 编辑
我搞错了,以为目的是去掉_的批处理了。
……
第一个代码有个小漏洞,如果是在非根目录,会把目录名也加入到文件名中,就跟上面的回显一样。hello
第二个代码可行。
标记学习一下:
是对文件名的最后特殊符号进行处理的算法,利用%~pi(路径的特性:\) %~ni(文件扩展名的特性:.)
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |