标题: [文本处理] [已解决]用批处理方式写一个文本批量改名程序 [打印本页]
作者: gpfgpf 时间: 2024-5-5 10:11 标题: [已解决]用批处理方式写一个文本批量改名程序
用批处理方式写一个文本批量改名程序,要求用文件名加文本的第一行或有效行,如果第一行是空行,则顺延到第二行,做为新的文件名。我的文件目录是e:\books全集\books\找回\。我用AI帮我写了几个程序,没有一个运行成功的,求大神给看一下,错在那里。
第一个- @echo off
- setlocal enabledelayedexpansion
-
- pushd e:\books 全集\books\找回\
-
- for /f "delims=" %%i in ('dir /b *.txt') do (
- set "line=%%i"
- for /f "tokens=1* delims=:" %%a in ('findstr /n. "%%i"') do (
- if "%%a" neq "" (
- set "newname=%%i -!line!:~0,1!"
- ren "%%i" "!newname!"
- goto :break
- )
- )
- :break
- )
-
- popd
复制代码
第二个- @echo off
- setlocal enabledelayedexpansion
-
- set "sourceDir=e:\books全集\books\找回\"
- for %%f in ("%sourceDir%*.txt") do (
- set "newFileName=%%~nf"
- for /f "delims=" %%a in ('type "%%f" ^| findstr /b /c:"[^ ]"') do (
- set "newFileName=%%~na"
- goto rename
- )
- )
- :rename
- ren "%%f" "!newFileName!.txt"
- endlocal
复制代码
第三个- @echo off
- setlocal enabledelayedexpansion
-
- set "sourceDir=e:\books全集\books\找回\"
- set "ext=txt" REM 更改为你的文件扩展名
-
- for /r "%sourceDir%" %%f in (*.%ext%) do (
- set "filename=%%f"
- set "newname="
-
- for /f "tokens=*" %%a in ('type "%%f"') do (
- if "!newname!"=="" (
- echo %%a | findstr /c:" " > nul
- if errorlevel 1 (
- set "newname=%%a"
- )
- ) else (
- set "newname=%%a"
- goto :renamed
- )
- )
-
- :renamed
- if not "!newname!"=="" (
- ren "!filename!" "!newname!.%ext%"
- )
- )
-
- endlocal
复制代码
第四个- @echo off
- setlocal enabledelayedexpansion
-
- rem 指定文件目录
- set "directory=e:\books全集\books\找回\"
-
- rem 遍历目录中的文件
- for /f "delims=" %%f in ('dir /b /a-d "%directory%*.txt"') do (
- set "file=%%f"
- set "newName="
-
- rem 读取文件的第一行
- for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%directory%\!file!"') do (
- if "%%a" neq "1" (
- set "newName=!newName!%%b"
- goto rename
- )
- )
-
- rem 如果第一行是空行,读取第二行
- for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%directory%\!file!" 2^>nul') do (
- set "newName=!newName!%%b"
- goto rename
- )
-
- :rename
- ren "%directory%\!file!" "!newName!.txt"
- )
-
- pause
复制代码
作者: Batcher 时间: 2024-5-5 10:27
回复 1# gpfgpf
请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
如果需要上传文件,请用使用网盘。
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: 77七 时间: 2024-5-5 11:18
- @echo off
- rem 批处理和文本全部保存为ansi编码格式
- cd /d "e:\books 全集\books\找回\"
- for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
- call :1 "%%i"
- )
- pause & exit
-
- :1
- for /f "useback delims=" %%a in ("%~1") do (
- ren "%~1" "%~n1_%%a%~x1"
- exit /b
- )
- exit /b
复制代码
作者: Five66 时间: 2024-5-5 19:27
不要用纯批处理 ,因为可能包含不能作为文件名的字符又或者文件名长度可能过长 , 处理起来超麻烦
换用powershell或jscript 或vbs或其他
作者: gpfgpf 时间: 2024-5-6 19:42 标题: RE: (已解决)用批处理方式写一个文本批量改名程序
谢谢 77七 完美解决。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |