批处理之查找字符串并重命名(重复加序号)
功能:查找固定字符串,找到字符串所在行内容,处理行内容,并以行内容重命名当前文本。1、以阅读源为例,处理后是小说源名称。
2、处理前需要自行分割阅读源。
3、代码有注释,可自行修改。
以下是代码:
```
@echo off
setlocal EnableDelayedExpansion
title 通过搜索输出文本内容并重命名文件
REM 提前定义搜索字符串
set "searchstr="bookSourceName":"
echo 要搜索的字符串是:%searchstr%
echo.
REM 获取当前目录下的.txt文件列表
for /F "delims=" %%F in ('dir /b *.txt') do (
call :processFile "%%F"
)
echo 文件处理完成。
echo.
pause
goto :eof
:processFile
set "fileName=%~1"
set "found=false"
set "newName="
set "counter=0"
set "baseNewName="
REM 逐行读取文件内容
for /F "usebackq delims=" %%L in ("%fileName%") do (
set "line=%%L"
REM 查找包含搜索字符串的行并处理
if not defined newName if not "!line:%searchstr%=!" == "!line!" (
set "found=true"
echo 当前查找文件:!fileName!
echo.
echo 字符串所在行内容是:%%L
echo.
REM 以下是文本提取
set "content=%%L"
REM 删除搜索字符串
set "content=!content:%searchstr%=!"
REM 删除空格、逗号、引号和单引号
set "content=!content: =!"
set "content=!content:'=!"
set "content=!content:"=!"
set "content=!content:,=!"
REM 删除不能用于文件名的字符为下划线
set "content=!content:\=!"
set "content=!content:/=!"
set "content=!content:?=!"
set "content=!content:"=!"
set "content=!content:<=!"
set "content=!content:>=!"
set "content=!content:|=!"
REM 删除*号,不会弄,试了好多方法,不行,会的自行添加,以下也不正确
echo 内容整理后是:!content!
echo.
set "baseNewName=!content!"
set "newName=!baseNewName!.txt"
)
)
REM 重命名
if "!found!" EQU "true" (
:renameCheck
if exist "!newName!" (
REM 文件名重复
set /a "counter+=1"
set "newName=!baseNewName!_!counter!.txt"
goto :renameCheck
) else (
echo 文件原始名称:!fileName!
echo.
echo 重命名为:!newName!
echo.
ren "!fileName!" "!newName!"
echo 重命名处理完成.
)
) else (
echo 文件 !fileName! 未找到指定字符串,未执行重命名操作。
)
goto :eof
```
使用方法:
1.本地建txt文本;
2.复制粘贴代码进文本内;(注意文本编码格式:否则可能乱码)
3.改文本后缀为bat;
4.放入需要处理的txt文本文件夹内。
5.点击批处理文件。
成品下载地址:https://www.123pan.com/s/97lKVv-p4Tlh.html 批处理对特殊字符不好处理
如果是我,在Directory Opus中不花多久就能用js脚本搞定这个重命名 并且没有批处理的特殊字符限制 set没法替换*,下面是别人的替代方案
http://www.bathome.net/viewthread.php?tid=16856
http://www.bathome.net/viewthread.php?tid=11692 本帖最后由 chuanglue 于 2024-6-23 17:34 编辑
发错贴了,抱歉 为啥我试了不行提示找不到指定字符串 批处理我也研究过 在一个共享文件夹里面放一个文本文件然后其他电脑共享方式比较本地的这个文件的某一行和这个内容的这一行替换 能成功 缺点就是速度慢 还有就是不能两台电脑同时运行比较 想试试你这个呢竟然失败了 批处理是一个很好用的东西 这个真的可以有,我入坑的系统是MS-DOS 一起学习,共同进步!
页:
[1]