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

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

本帖最后由 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
1

评分人数

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

回复 10# aloha20200628
感谢,完美解决。

TOP

回复 9# aabout2008

8楼代码已订正,规避了批处源文件...

TOP

回复 8# aloha20200628

效果堪称完美,只有一点没有排除批处理本身。
如我上面的示例,a.bat 运行后,会变成b.bat。

TOP

本帖最后由 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

评分人数

TOP

回复 5# aabout2008


   参考 链接
bat小白,请多指教!谢谢!

TOP

回复 3# 77七

谢谢您,不能改成中文,改中文会乱码。如果连中文都能改就更好了。

TOP

77七 发表于 2024-11-21 12:50


效果不错,但是不能改成中文,改中文就乱码。如果连中文都能改就更好了。

TOP

  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
复制代码
bat小白,请多指教!谢谢!

TOP

  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  和批处理本身呢?

TOP

返回列表