我有一个要编辑的文本文件,因此要删除最后一行。我有以下代码:
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;
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
基于...基于第一个值(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
。提示: