标题: [文件操作] [已解决]BAT遍历批量替换文件名中的字符串 [打印本页]
作者: loquat 时间: 2013-12-12 21:07 标题: [已解决]BAT遍历批量替换文件名中的字符串
本帖最后由 loquat 于 2013-12-14 11:47 编辑
依葫芦画瓢画了三个都不成功。求解。
要求为遍历批量替换jpg文件中的中文括号为英文中括号。
结果见5#,6#,7#- @echo off
- cd /d "%1"
- for /f "delims=" %%i in ('dir *.jpg /s /b /a-d') do
- (set f = %%i
- set f = %%f:【=[%%
- set f = %%f:】=]%
- ren "%%i" "%%f%%"
- )
- pause
复制代码
- @echo off
- setlocal enabledelayedexpansion
- for /r "%1" %%a in (*.jpg) do (
- set f = %%a
- set f = !f:【=[!
- set f = !f:】=]!
- ren "%%a" "!f!"
- )
- pause
复制代码
- @echo off
- if "%~1"=="" echo 请拖拽文件夹&pause&goto :eof
- if not exist "%~1\" echo 请拖拽文件夹&pause&goto :eof
- for /f "delims=" %%a in ('dir /a-d /b /s "%~1\*.jpg"') do
- (
- for %%b in ("%%dpa..") do
- (
- set f = %%a
- set f = %%f:【=[%%
- set f = %%f:】=]%%
- ren "%%b" "%%f%%"
- )
- )
- pause
复制代码
请高人指点一下这三段代码的问题都在哪里。。。
作者: terse 时间: 2013-12-12 21:40
第二段 应可行- set "f=%%a"
- set "f=!f:【=[!"
- set "f=!f:】=]!"
- ren "%%a" "!f!"
复制代码
作者: loquat 时间: 2013-12-12 21:49
本帖最后由 loquat 于 2013-12-12 22:16 编辑
回复 2# terse - @echo off
- setlocal enabledelayedexpansion
- for /r "%1" %%a in (*.jpg) do (
- set "f=%%a"
- set "f=!f:【=[!"
- set "f=!f:】=]!"
- ren "%%a" "!f!"
- )pause
复制代码
似乎还是不行。。。提示找不到文件,不知道怎么扩展到完整的路径。
作者: loquat 时间: 2013-12-12 21:56
可否使用
ren *【*.jpg *[*.jpg
ren *】*.jpg *]*.jpg
作者: loquat 时间: 2013-12-12 22:42
本帖最后由 loquat 于 2013-12-15 02:45 编辑
两种方案都搞定- @echo off
- setlocal enabledelayedexpansion
- for /r %1 %%a in (*.jpg) do (
- set "t=%%~nxa"
- set "t=!t:【=[!"
- set "t=!t:】=]!"
- ren "%%a" "!t!"
- )
复制代码
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir %1\*.jpg /s /b /a-d') do (
- set "f=%%~nxi"
- set "f=!f:【=[!"
- set "f=!f:】=]!"
- ren "%%i" "!f!"
- )
复制代码
作者: loquat 时间: 2013-12-12 22:59
本帖最后由 loquat 于 2013-12-15 02:45 编辑
去掉变量延迟。- @echo off
- for /f "delims=" %%i in ('dir %1\*.jpg /s /b /a-d') do (
- set "f=%%~nxi"
- call set f=%%f:【=[%%
- call set f=%%f:】=]%%
- call ren "%%i" %%f%%
- )
复制代码
作者: loquat 时间: 2013-12-12 22:59
本帖最后由 loquat 于 2013-12-15 02:40 编辑
临睡前解决4#方案,初学就不管效率了,呵呵
这个代码好像不行- @echo off
- for /f "delims=" %%a in ('dir /s /b /a:d') do (
- call cd /d "%%a%%"
- ren *【*.jpg *[*.jpg
- ren *】*.jpg *]*.jpg
- )pause
复制代码
作者: loquat 时间: 2013-12-12 23:00
用好for和变量延迟,很重要
作者: loquat 时间: 2013-12-15 02:47
本帖最后由 loquat 于 2013-12-15 02:54 编辑
其实我还有个问题。
%1和%~1到底谁的通用性好?
是不是一样的通用性?%~1的效用就是删除引号。
而%1本身就是自带引号的。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |