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

Batch file 使用基于值的批处理文件从文本文件中删除回车,batch-file,batch-rename,Batch File,Batch Rename,我有一个文本文件,我想编辑,因此想删除最后一行。我对此有以下代码: 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;sd

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

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;

如果我将(input.txt)do…循环中/F“delims=“%%a”的
替换为等效的:

输出

1st run
2>NUL del output.txt&D:\bat\CR\61816520.bat

下一次运行
D:\bat\CR\61816520.bat


你的问题不清楚

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

它是
SORT
ed吗?还是在同一行上重复写

@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
@echo关闭
SETLOCAL EnableExtensions EnableDelayedExpansion
::变量
在文件中设置“in=input.txt”
设置“out=output.txt”输出文件
设置/a“#行=0”
设置“gruppe=”
设置“prevContent=”
::数行
对于/F%%L英寸('
“findstr/N”^^“%in%”%=不要跳过空行=%
“)是否设置/a”#行数+=1”%=获取行数=%
::通过SET/P读取#行次数
刘海(!)将丢失
“%out%”(FOR/L%%#in(11%#行%)do(
设置“data=”::清除数据
设置/p“data=”::从中读取
对于(“!data!”)中的/F标记^=1^delims^=^;^eol^=%%T,请设置“gruppe=%%T”
如果不是“!prevContent!”==”!gruppe!”(
设置“prevContent=!gruppe!”
回音(
)

…基于什么值?对不起,第一个值(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;
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;
@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