返回列表 发帖

[文本处理] [已解决]求批处理删除相同标题中的任意一个

我有许多文本文件的第一行中的标题由二个紧挨着的相同内容标题组成(注意:紧挨着的,二者之间没有空格和符号)举例如下:
1.txt的第一行内容是:早晨早晨
2.txt的第一行内容是:公园的空气公园的空气
3.txt的第一行内容是:海岸边海岸边
求批处理,能批量删除第一行中二个相同标题中的任意一个,希望处理后的结果如下:
1.txt的第一行内容是:早晨
2.txt的第一行内容是:公园的空气
3.txt的第一行内容是:海岸边
拜托各位高人了,谢谢。

本帖最后由 zaqmlp 于 2019-6-19 18:16 编辑
@echo off
set info=互助互利,支付宝扫码头像,感谢赞助
rem 有问题,可加QQ956535081及时沟通
title %info%
cd /d "%~dp0"
set "folder=结果"
md "%folder%" 2>nul
powershell -NoProfile -ExecutionPolicy bypass ^
    $files=@(dir^|?{('.txt' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});^
    for($i=0;$i -lt $files.length;$i++){^
        write-host $files[$i].Name;^
        $text=[IO.File]::ReadAllLines($files[$i].FullName,[Text.Encoding]::Default);^
        if($text[0].trim() -match '^^(.+)\1$'){$text[0]=$matches[1]};^
        [IO.File]::WriteAllLines(('%folder%\'+$files[$i].Name), $text, [Text.Encoding]::Default);^
    }
echo;%info%
pauseCOPY
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

各位高手:您们好。对于我的批处理方案,至今没有回复,看来有难度,麻烦大家了。我在想:tokens=m-n这条命令是提取从m列到n列的所有字符串,这里m取1,n的取值是第一行所有字符串个数除以2,我是新手,不知道有没有这样的批处理能批量检测第一行字符串的个数再除以2,若能办到,n的取值就解决了。哪位高手有兴趣不妨试试,向高手学习。

TOP

回复 3# pwq

看到你的这个帖子,偶忍不住笑了。2楼不是给你答案了吗?  纯P 也就是就是计算一行多少个字再除以2,再取字符串而已。

TOP

回4楼,2楼提供的批处理是错的,不能使用。不信您可运行一下试试。<结果>里是空的

TOP

回复 5# pwq


    点击2楼左下角的回复,他会收到通知。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# zaqmlp

<zapmlp>大师先生:您好!
首先感谢您在百忙中为我写了这个批处理,我已下载并试运行。结果不好,<结果>中是空的,批处理没成功。给您添麻烦了,谢谢您。

TOP

回复 7# pwq

我代码中最前面几行已经说的很明白了
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 1# pwq


测试代码之前请注意做好备份
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
    echo 正在处理文件 %%a
    set /p FirstLine=<"%%a"
    call :GetLen FirstLine LineLen
    set /a HalfLen=LineLen/2
    (for %%i in (!HalfLen!) do (
        if "!FirstLine:~0,%%i!" equ "!FirstLine:~%%i!" (
            echo,!FirstLine:~0,%%i!
        ) else (
            echo,!FirstLine!
        )        
    ))>"%%a.new"
    more +1 "%%a" >> "%%a.new"
    move /y "%%a.new" "%%a"
)
pause
goto :eof
:GetLen
setlocal enabledelayedexpansion
set "$=!%1!#"
set N=&for %%a in (4096 2048 1024 512 256 128 64 32 16)do if !$:~%%a!. NEQ . set/aN+=%%a&set $=!$:~%%a!
set $=!$!fedcba9876543210&set/aN+=0x!$:~16,1!
endlocal&If %2. neq . (set/a%2=%N%)else echo %N%
goto :eofCOPY
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 10# WHY


    首先感谢WHY大师对我的关爱和指导,谢谢您。您的批处理我已下载并试运行,结果是失败的。再次谢谢您在百忙之中帮助和指导我,我是来向您学习的。谢谢!

TOP

回复 9# Batcher


    首先感谢Batcher大师对我的关爱和指导,谢谢您。您的批处理我已下载并试运行,结果是失败的。再次谢谢您在百忙之中帮助和指导我,我是来向您学习的。谢谢!

TOP

回复 12# pwq


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

TOP

回复 13# Batcher

Batcher大师:您好。不须上传,您随便写个文本文件即可。第一行的内容是二个相同的标题(注意:紧挨着的,二者之间没有空格和符号),第二行内容随便写。见如下说明:
我有许多文本文件的第一行中的标题由二个紧挨着的相同内容标题组成(注意:紧挨着的,二者之间没有空格和符号)举例如下:
1.txt的第一行内容是:早晨早晨
2.txt的第一行内容是:公园的空气公园的空气
3.txt的第一行内容是:海岸边海岸边
求批处理,能批量删除第一行中二个相同标题中的任意一个,希望处理后的结果如下:
1.txt的第一行内容是:早晨
2.txt的第一行内容是:公园的空气
3.txt的第一行内容是:海岸边
拜托各位高人了,谢谢。

TOP

回复 14# pwq


    9楼代码发出来之前已经用这样的3个文件测试过了,没有发现问题。所以才需要你把测试之前的txt、测试用的bat、测试之后的txt打包压缩上传,这样我才能找到线索。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 15# Batcher


    Batcher大师,您好!麻烦您了。如何上传给您?

TOP

返回列表