良有益 发表于 2024-6-23 11:44

批处理之查找字符串并重命名(重复加序号)

功能:查找固定字符串,找到字符串所在行内容,处理行内容,并以行内容重命名当前文本。
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

何西烛 发表于 2024-6-23 16:13

批处理对特殊字符不好处理

如果是我,在Directory Opus中不花多久就能用js脚本搞定这个重命名   并且没有批处理的特殊字符限制

平淡最真 发表于 2024-6-23 16:13

set没法替换*,下面是别人的替代方案
http://www.bathome.net/viewthread.php?tid=16856
http://www.bathome.net/viewthread.php?tid=11692

chuanglue 发表于 2024-6-23 17:28

本帖最后由 chuanglue 于 2024-6-23 17:34 编辑

发错贴了,抱歉

理想的海洋 发表于 2024-6-23 18:04

为啥我试了不行提示找不到指定字符串   

理想的海洋 发表于 2024-6-23 18:08

批处理我也研究过   在一个共享文件夹里面放一个文本文件然后其他电脑共享方式比较本地的这个文件的某一行和这个内容的这一行替换   能成功   缺点就是速度慢 还有就是不能两台电脑同时运行比较   想试试你这个呢竟然失败了

uygh 发表于 2024-6-23 23:23

批处理是一个很好用的东西

龍謹 发表于 2024-6-24 07:20

这个真的可以有,我入坑的系统是MS-DOS

morningb0y 发表于 2024-6-24 10:02

一起学习,共同进步!
页: [1]
查看完整版本: 批处理之查找字符串并重命名(重复加序号)