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

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

[复制链接]
发表于 2013-12-12 21:07:06 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码
请高人指点一下这三段代码的问题都在哪里。。。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-12-12 21:40:19 | 显示全部楼层
第二段 应可行

  1.     set "f=%%a"
  2.     set "f=!f:【=[!"
  3.     set "f=!f:】=]!"
  4.     ren "%%a" "!f!"

复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2013-12-12 21:49:35 | 显示全部楼层
本帖最后由 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
复制代码
似乎还是不行。。。提示找不到文件,不知道怎么扩展到完整的路径。
 楼主| 发表于 2013-12-12 21:56:55 | 显示全部楼层
可否使用
ren *【*.jpg *[*.jpg
ren *】*.jpg *]*.jpg
 楼主| 发表于 2013-12-12 22:42:42 | 显示全部楼层
本帖最后由 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. )
复制代码
 楼主| 发表于 2013-12-12 22:59:14 | 显示全部楼层
本帖最后由 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. )
复制代码
 楼主| 发表于 2013-12-12 22:59:40 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2013-12-12 23:00:56 | 显示全部楼层
用好for和变量延迟,很重要
 楼主| 发表于 2013-12-15 02:47:40 | 显示全部楼层
本帖最后由 loquat 于 2013-12-15 02:54 编辑

其实我还有个问题。
%1和%~1到底谁的通用性好?
是不是一样的通用性?%~1的效用就是删除引号。
而%1本身就是自带引号的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 01:24 , Processed in 0.034304 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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