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

[文件操作] [已解决]BAT遍历批量替换文件名中的字符串

本帖最后由 loquat 于 2013-12-14 11:47 编辑

依葫芦画瓢画了三个都不成功。求解。
要求为遍历批量替换jpg文件中的中文括号为英文中括号。
结果见5#,6#,7#
  1. @echo off
  2. cd /d "%1"
  3. for /f "delims=" %%i in ('dir *.jpg /s /b /a-d') do
  4. (set f = %%i
  5.     set f = %%f:【=[%%
  6.     set f = %%f:】=]%
  7.     ren "%%i" "%%f%%"
  8. )
  9. pause
复制代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /r "%1" %%a in (*.jpg) do (
  4.     set f = %%a
  5.     set f = !f:【=[!
  6.     set f = !f:】=]!
  7.     ren "%%a" "!f!"
  8. )
  9. pause
复制代码
  1. @echo off
  2. if "%~1"=="" echo 请拖拽文件夹&pause&goto :eof
  3. if not exist "%~1\" echo 请拖拽文件夹&pause&goto :eof
  4. for /f "delims=" %%a in ('dir /a-d /b /s "%~1\*.jpg"') do
  5. (
  6.    for %%b in ("%%dpa..") do
  7.    (
  8.       set f = %%a
  9.       set f = %%f:【=[%%
  10.       set f = %%f:】=]%%
  11.       ren "%%b" "%%f%%"
  12.    )
  13. )
  14. pause
复制代码
请高人指点一下这三段代码的问题都在哪里。。。
1

评分人数

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

第二段 应可行
  1.     set "f=%%a"
  2.     set "f=!f:【=[!"
  3.     set "f=!f:】=]!"
  4.     ren "%%a" "!f!"
复制代码
1

评分人数

TOP

本帖最后由 loquat 于 2013-12-12 22:16 编辑

回复 2# terse
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /r "%1" %%a in (*.jpg) do (
  4.     set "f=%%a"
  5.     set "f=!f:【=[!"
  6.     set "f=!f:】=]!"
  7.     ren "%%a" "!f!"
  8. )pause
复制代码
似乎还是不行。。。提示找不到文件,不知道怎么扩展到完整的路径。

TOP

可否使用
ren *【*.jpg *[*.jpg
ren *】*.jpg *]*.jpg

TOP

本帖最后由 loquat 于 2013-12-15 02:45 编辑

两种方案都搞定
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /r %1 %%a in (*.jpg) do (
  4. set "t=%%~nxa"
  5. set "t=!t:【=[!"
  6. set "t=!t:】=]!"
  7. ren "%%a" "!t!"
  8. )
复制代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir %1\*.jpg /s /b /a-d') do (
  4. set "f=%%~nxi"
  5. set "f=!f:【=[!"
  6. set "f=!f:】=]!"
  7. ren "%%i" "!f!"
  8. )
复制代码

TOP

本帖最后由 loquat 于 2013-12-15 02:45 编辑

去掉变量延迟。
  1. @echo off
  2. for /f "delims=" %%i in ('dir %1\*.jpg /s /b /a-d') do (
  3. set "f=%%~nxi"
  4. call set f=%%f:【=[%%
  5. call set f=%%f:】=]%%
  6. call ren "%%i" %%f%%
  7. )
复制代码

TOP

本帖最后由 loquat 于 2013-12-15 02:40 编辑

临睡前解决4#方案,初学就不管效率了,呵呵
这个代码好像不行
  1. @echo off
  2. for /f "delims=" %%a in ('dir /s /b /a:d') do (
  3. call cd /d "%%a%%"
  4. ren *【*.jpg *[*.jpg
  5. ren *】*.jpg *]*.jpg
  6. )pause
复制代码

TOP

用好for和变量延迟,很重要

TOP

本帖最后由 loquat 于 2013-12-15 02:54 编辑

其实我还有个问题。
%1和%~1到底谁的通用性好?
是不是一样的通用性?%~1的效用就是删除引号。
而%1本身就是自带引号的。

TOP

返回列表