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

[文本处理] [已解决]用批处理方式写一个文本批量改名程序

[复制链接]
发表于 2024-5-5 10:11:45 | 显示全部楼层 |阅读模式
用批处理方式写一个文本批量改名程序,要求用文件名加文本的第一行或有效行,如果第一行是空行,则顺延到第二行,做为新的文件名。我的文件目录是e:\books全集\books\找回\。我用AI帮我写了几个程序,没有一个运行成功的,求大神给看一下,错在那里。
第一个
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. pushd e:\books 全集\books\找回\

  4. for /f "delims=" %%i in ('dir /b *.txt') do (
  5.     set "line=%%i"
  6.     for /f "tokens=1* delims=:" %%a in ('findstr /n. "%%i"') do (
  7.         if "%%a" neq "" (
  8.             set "newname=%%i -!line!:~0,1!"
  9.             ren "%%i" "!newname!"
  10.             goto :break
  11.         )
  12.     )
  13.     :break
  14. )

  15. popd
复制代码
第二个
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. set "sourceDir=e:\books全集\books\找回"
  4. for %%f in ("%sourceDir%*.txt") do (
  5.     set "newFileName=%%~nf"
  6.     for /f "delims=" %%a in ('type "%%f" ^| findstr /b /c:"[^ ]"') do (
  7.         set "newFileName=%%~na"
  8.         goto rename
  9.     )
  10. )
  11. :rename
  12. ren "%%f" "!newFileName!.txt"
  13. endlocal
复制代码
第三个
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. set "sourceDir=e:\books全集\books\找回"
  4. set "ext=txt"  REM 更改为你的文件扩展名

  5. for /r "%sourceDir%" %%f in (*.%ext%) do (
  6.     set "filename=%%f"
  7.     set "newname="
  8.    
  9.     for /f "tokens=*" %%a in ('type "%%f"') do (
  10.         if "!newname!"=="" (
  11.             echo %%a | findstr /c:" " > nul
  12.             if errorlevel 1 (
  13.                 set "newname=%%a"
  14.             )
  15.         ) else (
  16.             set "newname=%%a"
  17.             goto :renamed
  18.         )
  19.     )

  20. :renamed
  21.     if not "!newname!"=="" (
  22.         ren "!filename!" "!newname!.%ext%"
  23.     )
  24. )

  25. endlocal
复制代码
第四个
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. rem 指定文件目录
  4. set "directory=e:\books全集\books\找回"

  5. rem 遍历目录中的文件
  6. for /f "delims=" %%f in ('dir /b /a-d "%directory%*.txt"') do (
  7.     set "file=%%f"
  8.     set "newName="

  9.     rem 读取文件的第一行
  10.     for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%directory%\!file!"') do (
  11.         if "%%a" neq "1" (
  12.             set "newName=!newName!%%b"
  13.             goto rename
  14.         )
  15.     )

  16.     rem 如果第一行是空行,读取第二行
  17.     for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%directory%\!file!" 2^>nul') do (
  18.         set "newName=!newName!%%b"
  19.         goto rename
  20.     )

  21.     :rename
  22.     ren "%directory%\!file!" "!newName!.txt"
  23. )

  24. pause
复制代码

评分

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

查看全部评分

发表于 2024-5-5 10:27:51 | 显示全部楼层
回复 1# gpfgpf


请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA

如果需要上传文件,请用使用网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
发表于 2024-5-5 11:18:57 | 显示全部楼层
  1. @echo off
  2. rem 批处理和文本全部保存为ansi编码格式
  3. cd /d "e:\books 全集\books\找回"
  4. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  5.         call :1 "%%i"
  6. )
  7. pause & exit

  8.         :1
  9.         for /f "useback delims=" %%a in ("%~1") do (
  10.                 ren "%~1" "%~n1_%%a%~x1"
  11.                 exit /b
  12.         )
  13.         exit /b
复制代码

评分

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

查看全部评分

发表于 2024-5-5 19:27:53 | 显示全部楼层
不要用纯批处理 ,因为可能包含不能作为文件名的字符又或者文件名长度可能过长 , 处理起来超麻烦
换用powershell或jscript 或vbs或其他
 楼主| 发表于 2024-5-6 19:42:42 | 显示全部楼层

RE: (已解决)用批处理方式写一个文本批量改名程序

谢谢  77七 完美解决。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 01:18 , Processed in 0.019886 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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