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

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

用批处理方式写一个文本批量改名程序,要求用文件名加文本的第一行或有效行,如果第一行是空行,则顺延到第二行,做为新的文件名。我的文件目录是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
复制代码
1

评分人数

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

回复 1# gpfgpf


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

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

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  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

评分人数

bat小白,请多指教!谢谢!

TOP

不要用纯批处理 ,因为可能包含不能作为文件名的字符又或者文件名长度可能过长 , 处理起来超麻烦
换用powershell或jscript 或vbs或其他

TOP

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

谢谢  77七 完美解决。

TOP

返回列表