使用基于值的批处理文件从文本文件中删除回车

问题描述 投票:-1回答:2

我有一个要编辑的文本文件,因此要删除最后一行。我有以下代码:

for /f "delims=" %%a in (input.txt) do (
echo/|set /p ="%%a%"
)>>output.txt

输入:

GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;
GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;
GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;
GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;
GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;
GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;

输出:

GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;

现在,我想按第一个值分组编辑数据,以便获得以下输出:

GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;
GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;
batch-file batch-rename
2个回答
0
投票
如果将FOR /F "delims=" %%a in (input.txt) do …循环替换为等效的FOR %%a in … loop

FOR %%a in …

输出:

第一次运行

@ECHO OFF SETLOCAL EnableExtensions EnableDelayedExpansion set "_gruppeName=" ( for %%a in ( "GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;" "GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;" "GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;" "GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;" "GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;" "GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;" "GRUPPEC;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;" "GRUPPEC;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;" "GRUPPEC;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;" ) do ( for /f "tokens=1 delims=;" %%A in ("%%~a") do ( if /I NOT "%%~A"=="!_gruppeName!" ( if defined _gruppeName echo( set "_gruppeName=%%~A" ) ) echo/|set /p ="%%~a" ) echo( )>>output.txt REM debugging output follows type output.txt
2>NUL del output.txt & D:\bat\CR\61816520.bat

下次运行:GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf; GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf; GRUPPEC;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEC;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEC;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;

D:\bat\CR\61816520.bat

0
投票
您的问题不清楚

基于...基于第一个值(GRUPPEA)

GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf; GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf; GRUPPEC;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEC;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEC;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf; GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEA;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf; GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEB;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf; GRUPPEC;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEC;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf;GRUPPEC;123;12345;sdfdsfds;sdfdsfsdfs;sdfsdfafsf; 是否?还是只是在同一行上写重复项?

SORT


脚本使用@echo off SETLOCAL EnableExtensions EnableDelayedExpansion ::VARIABLES set "in=input.txt" IN file set "out=output.txt" OUT file set/a"#lines=0" set "gruppe=" set "prevContent=" ::Count lines FOR /F %%L in (' "findstr /N "^^" "%in%" %= do not skip empty lines =%" ') do set/a"#lines+=1" %= Get the # of lines =% ::Read IN via SET /P #LINES number of times ::Bangs (!) will be lost <"%in%" >"%out%" (FOR /L %%# in (1 1 %#lines%) do ( set "data=" ::clear DATA set/p"data=" ::read from IN FOR /F tokens^=1^ delims^=^;^ eol^= %%T in ("!data!") do set "gruppe=%%T" if NOT "!prevContent!" == "!gruppe!" ( set "prevContent=!gruppe!" echo( ) <nul set/p"=!data!" ::does not work with leading space, tabs, or equal signs )) %= read file by lines via SET /P =% exit /b FINDSTR /N循环来计算行数,以计算行数,这需要多次执行FINDSTR /N

提示:

    使用FOR /F代替有问题的FOR /F
  • 使用管道SET /P非常慢,如
  • @ jeb ECHO(所述。使用ECHO(代替
© www.soinside.com 2019 - 2024. All rights reserved.