如何编写批处理批量修改目录文件名:替换指定位置空格为指定串?
没问题,我来帮你搞定这两个批量重命名的需求,用Windows批处理就能轻松实现,下面分情况给你详细说明:
一、批量替换文件名的首个空格为指定字符串
假设你想把文件名里的首个空格替换成自定义字符串(比如_CUSTOM-),可以用这个批处理脚本:
@echo off setlocal enabledelayedexpansion set "replace_str=_CUSTOM-" :: 这里替换成你需要的目标字符串 :: 遍历当前目录下的所有文件 for %%f in (*.*) do ( set "full_name=%%~f" set "file_name=%%~nf" set "ext=%%~xf" :: 检查文件名是否包含空格 echo !file_name! | findstr /r " " >nul if not errorlevel 1 ( :: 拆分首个空格前的内容和后续内容 for /f "tokens=1* delims= " %%a in ("!file_name!") do ( set "new_name=%%a!replace_str!%%b" ) :: 执行重命名(测试时可改为echo ren预览命令) ren "!full_name!" "!new_name!!ext!" ) ) echo 批量替换完成! pause
关键说明:
setlocal enabledelayedexpansion:开启延迟变量扩展,确保循环内的变量修改能实时生效replace_str:替换首个空格的目标字符串,你可以根据需求自由修改for /f "tokens=1* delims= ":以空格为分隔符,把文件名拆成两部分——%%a是首个空格前的内容,%%b是空格后的所有内容- 注意:测试时建议先把
ren改成echo ren,预览生成的重命名命令是否正确,避免误改文件
二、替换前8个字符后的首个空格为_TEMP-
针对你给出的示例(12345678 Hello World.txt → 12345678_TEMP-Hello World.txt),这个脚本会精准定位前8个字符后的首个空格并替换:
@echo off setlocal enabledelayedexpansion set "insert_str=_TEMP-" :: 遍历当前目录下的所有文件 for %%f in (*.*) do ( set "full_name=%%~f" set "file_name=%%~nf" set "ext=%%~xf" :: 检查文件名长度是否≥9,且后续部分包含空格 if "!file_name:~8!" neq "" ( echo !file_name:~8! | findstr /r " " >nul if not errorlevel 1 ( :: 提取前8个字符作为前缀 set "prefix=!file_name:~0,8!" :: 提取第9个字符开始的后缀部分 set "suffix=!file_name:~8!" :: 替换后缀里的首个空格为目标字符串 for /f "tokens=1* delims= " %%a in ("!suffix!") do ( set "new_suffix=%%a!insert_str!%%b" ) :: 拼接新文件名并执行重命名 set "new_name=!prefix!!new_suffix!" ren "!full_name!" "!new_name!!ext!" ) ) ) echo 批量处理完成! pause
关键说明:
!file_name:~0,8!:截取文件名的前8个字符!file_name:~8!:截取从第9个字符开始的所有内容- 脚本会先判断文件名长度是否足够(≥9),且后缀部分包含空格,避免处理不符合结构的文件
- 同样,测试时可以用
echo ren预览命令,确认无误后再改为ren
使用提示:
- 把上述脚本保存为
.bat文件(比如rename_files.bat) - 将该文件放到你要处理的文件所在目录
- 双击运行即可自动批量处理
内容的提问来源于stack exchange,提问作者Wiz321




