返回列表 发帖
本帖最后由 kokoxx 于 2023-9-25 11:13 编辑

回复 15# Batcher



    我是直接将测试样本里的对应文本(包括冒号)复制粘贴的,最起码的关键词替换我还是懂的……

TOP

回复 12# kokoxx


  
@echo off
rem 批处理保存为utf-8编码格式
chcp 65001 >nul
for /f "useback delims=" %%i in (`dir /b /a-d *.txt`) do (
setlocal
for /f "useback tokens=1* delims=[]" %%a in (`find /n "猜你喜欢:" ^<"%%i"`) do (
set _"%%a"=1
)
for /f "useback tokens=1* delims=[]" %%a in (`find /n "更多推荐:" ^<"%%i"`) do (
set _"%%a"=1
)
(for /f "useback tokens=1* delims=[]" %%a in (`find /n /v "" ^<"%%i"`) do (
if not defined _"%%a" (
echo=%%b
) else (
echo=
)
))>$
move $ "%%i"
endlocal
)
pauseCOPY
bat小白,请多指教!谢谢!

TOP

回复 17# 77七


    感谢大佬答复

我这边将关键词去掉冒号(将`find /n "猜你喜欢:" ^<"%%i"`   改成`find /n "猜你喜欢" ^<"%%i"`   )测试成功

至于为啥要去掉冒号才成功,我也不知道为什么~

TOP

回复 18# kokoxx


   应该是 猜你喜欢: 这个字符串在原文中没有找到。
使用你提供的文件,我这里测试正常。
bat小白,请多指教!谢谢!

TOP

回复 19# 77七


    大佬,我又双叒叕要叨扰您了~

还是处理txt文本,希望能实现如下功能:

查找定位bat同文件夹下*.txt中所有带.html的文本行

将该文本行连同该文本行上面的两个文本行和下面的一行文本行,替换成一个文本行

举例

【原版】

1我是是是是www啊啊
2www啊啊
3呜呜呜呜谁反对
4奥术大师多
5 1212.html 我说的
6阿勒泰堵塞
7阿萨德
8大额ad


【修改后版】

1我是是是是www啊啊
2www啊啊

7阿萨德
8大额ad

--------

测试样本

https://www.123pan.com/s/pbxrVv-lOAY.html

TOP

回复 20# kokoxx


  
@echo off
rem 批处理保存为utf-8编码格式
chcp 65001 >nul
for /f "useback delims=" %%i in (`dir /b /a-d *.txt`) do (
setlocal
for /f "useback tokens=1* delims=[]" %%a in (`find /n ".html" ^<"%%i"`) do (
for %%x in (-2 -1 0 1) do (
set /a n=%%a+%%x
call set _"%%n%%"=1
)
)
(for /f "useback tokens=1* delims=[]" %%a in (`find /n /v "" ^<"%%i"`) do (
if not defined _"%%a" (
if defined m (
echo=
set m=
)
echo=%%b
) else (
set m=1
)
))>$
move $ "%%i"
endlocal
)
pauseCOPY
bat小白,请多指教!谢谢!

TOP

回复 21# 77七


    感谢大佬,测试通过

提问:如果我要实现在.html所在文本行上数4行,下数2行都做成空白行

就是将

for %%x in (-2 -1 0 1) do (

改成

for %%x in (-4 -3 -2 -1 0 1 2) do (

对吧?

TOP

回复 22# kokoxx


   对的,7行缩成一行空白
bat小白,请多指教!谢谢!

TOP

本帖最后由 qixiaobin0715 于 2023-9-27 14:50 编辑

回复 20# kokoxx
使用变量迭代法不知是否可行。这样可以防止定义变量太多而引起的效率不高的问题:
@echo off
chcp 65001>nul
for /f "delims=" %%I in ('dir /b /a-d *.txt') do (
    setlocal enabledelayedexpansion
    set n=1
    (for /f "tokens=1* delims=:" %%i in ('findstr /n .* "%%I"') do (
        set /a n+=1
        set s1=!s2!
        set s2=!s3!
        set s3=%%j
        if defined s3 (
            set s=!s3:.html=!
            if not "!s!"=="!s3!" (
                set n=0
                echo,
            )
        )
        if !n! geq 4 echo,!s1!
    )
    if !n! geq 3 (
        echo,!s2!
        echo,!s3!
    ) else if !n! equ 2 (
        echo,!s3!
    ))>temp
    move "temp" "%%I"
    endlocal
)
pauseCOPY
代码未经测试,可能有问题,思路应当是对的。

TOP

本帖最后由 qixiaobin0715 于 2023-9-27 20:35 编辑

回复 22# kokoxx
行数过多的话可以这样写比较简洁一些:
for /l %%i in (-4,1,2) do (...COPY

TOP

回复 18# kokoxx
@echo off
chcp 65001>nul
set /a _"猜你喜欢"=_"更多推荐"=1
for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
    (for /f "tokens=1,2* delims=::" %%a in ('findstr /n .* "%%i"') do (
        if defined _"%%b" (
            echo,
        ) else (
            if "%%c"=="" (
                echo,%%b
            ) else (
                echo,%%b%%c
            )
        )
    ))>temp
move "temp" "%%i"
)
pauseCOPY

TOP

回复 8# kokoxx
@echo off
chcp 65001>nul
for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
    (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%%i"') do (
        if "%%b"=="" (
            echo,
        ) else (
            for /f "tokens=1,2* delims=0123456789 " %%j in ("%%b") do (
                if "%%j%%k"=="第章" (
                    if "%%l"=="此行不做添加空行处理" (
                        echo,%%b
                    ) else (
                        echo,
                        echo,
                        echo,
                        echo,%%b
                        echo,
                        echo,
                        echo,
                    )
                ) else (
                    echo,%%b
                )
            )
        )
    ))>temp
move "temp" "%%i"
)
pauseCOPY

TOP

回复 17# 77七


    大佬您好,时隔多日后,再度叨扰您

如果这里要求是将符合指定关键字条件(“猜你喜欢:”和“更多推荐”)的所在行直接删除,而不是将之变成一个空白行,将如何修改第14行的“echo=%%b”?

TOP

回复 28# kokoxx


  
(for /f "useback tokens=1* delims=[]" %%a in (`find /n /v "" ^<"%%i"`) do (
if not defined _"%%a" (
echo=%%b
)
))>$COPY
12-18行改为上面的,即去掉else (echo=)
bat小白,请多指教!谢谢!

TOP

回复 11# 77七


    大佬,抱歉又来叨扰您了

您能不能出手写一个bat,实现将bat同文件夹下的txt里的x个连续空白文本行替换成y个空白行(用wps或word的话,如果txt很大(超过4m),程序就会卡死T-T)

这里假定x=3,y=2

【处理前】

我是谁



我是谁

我是谁

【处理后】

我是谁


我是谁

我是谁

TOP

返回列表