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

[文件操作] 【已解决】批处理如何批量替换文件名?

[复制链接]
发表于 2024-11-21 09:58:01 | 显示全部楼层 |阅读模式
本帖最后由 aabout2008 于 2024-11-25 13:55 编辑

比如当前文件夹下有无数张照片:

a1.1.jpg
a1.2.jpg
a1.3.jpg
a1.4.jpg
a1.5.jpg
a1.6.jpg
……
a1.999.jpg

我要将文件名中的a替换成b
b1.1.jpg
b1.2.jpg
b1.3.jpg
b1.4.jpg
b1.5.jpg
b1.6.jpg
……
b1.999.jpg

要实现的效果是:在当前文件夹下,点击后就将原来所有的文件改名,且不论文件夹下是什么格式的文件,不局限于当前示例的jpg。
思路就是在bat,可以设置一个字符  替换成另一个字符,后期可以按需修改。

批处理获取路径就是当前文件夹目录,不要使用绝对路径。

批处理改名要排除批处理本身,如果目录下这个执行的批处理是a1.1.bat  不会修改成b1.1.bat

评分

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

查看全部评分

 楼主| 发表于 2024-11-21 10:02:47 | 显示全部楼层
  1. @echo off
  2. set folder_path=%~dp0
  3. set output_file=%~dp0\Output.txt
  4. dir /b "%folder_path%\*" > "%output_file%"
  5. pause
复制代码
我在网上找到的只能实现这种功能。
这个获取当前目录下的文件名,如何排除Output.txt  和批处理本身呢?
发表于 2024-11-21 12:50:03 | 显示全部楼层
  1. @echo off
  2. rem 保存为ansi编码
  3. cd /d "%~dp0"
  4. set "oldstr=a"
  5. set "newstr=b"
  6. for /f "delims=" %%i in ('dir /b /a-d') do (
  7.         if "%%i" neq "%~nx0" (
  8.                 set n=%%~ni
  9.                 if defined n (
  10.                         call ren "%%i" "%%n:%oldstr%=%newstr%%%%%~xi"
  11.                 )
  12.         )
  13. )
  14. pause
复制代码
 楼主| 发表于 2024-11-23 20:44:06 | 显示全部楼层
77七 发表于 2024-11-21 12:50


效果不错,但是不能改成中文,改中文就乱码。如果连中文都能改就更好了。
 楼主| 发表于 2024-11-23 20:45:04 | 显示全部楼层
回复 3# 77七

谢谢您,不能改成中文,改中文会乱码。如果连中文都能改就更好了。
发表于 2024-11-23 21:28:27 | 显示全部楼层
回复 5# aabout2008


   参考 链接
发表于 2024-11-24 10:15:12 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-11-25 11:41 编辑

回复 5# aabout2008

以下两版批处代码均可替换文件名中的中文字符(任何位置),只要确保第一版批处存为简中(936)编码(如记事本的ANSI编码),第二版批处存为utf-8编码即可,总之,保存脚本的编码要与脚本行头采用的码页保持一致。实际上用第一版就可以了...

第一版

  1. @echo off &chcp 936>nul
  2. set "s1=自行车" &set "s2=坦克车"
  3. for /f "delims=" %%F in ('dir /b/a-d *%s1%*') do if "%%~nxF" neq "%~nx0" (
  4.    set "F=%%~nF" &setlocal enabledelayedexpansion
  5.    (ren "%%F" "!F:%s1%=%s2%!%%~xF") &endlocal)
  6. endlocal&pause&exit/b
复制代码
第二版

  1. @echo off &chcp 65001>nul
  2. set "s1=自行车" &set "s2=坦克车"
  3. for /f "delims=" %%F in ('dir /b/a-d *%s1%*') do if "%%~nxF" neq "%~nx0" (
  4.    set "F=%%~nF" &setlocal enabledelayedexpansion
  5.    (ren "%%F" "!F:%s1%=%s2%!%%~xF") &endlocal)
  6. pause&exit/b
复制代码
备注》代码中对文件名的字符串替换是整体替换,即出现在任何位置的目标字符串均被替换;对英文字符替换的匹配模式为不区分大小写

评分

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

查看全部评分

 楼主| 发表于 2024-11-25 10:19:37 | 显示全部楼层
回复 8# aloha20200628

效果堪称完美,只有一点没有排除批处理本身。
如我上面的示例,a.bat 运行后,会变成b.bat。
发表于 2024-11-25 11:43:39 | 显示全部楼层
回复 9# aabout2008

8楼代码已订正,规避了批处源文件...
 楼主| 发表于 2024-11-25 13:54:35 | 显示全部楼层
回复 10# aloha20200628
感谢,完美解决。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 16:49 , Processed in 0.023104 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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