计数频率字符串重复批处理文件

时间:2018-07-12 19:15:33

标签: batch-file scripting

源文件A.txt

7895537000011
7895537000028
7895537000035
7895537000042
7895537000059
7895537000066
7895537000011
7895537000011
7895537000028
7895537000028
7895537000028
7895537000059
7895537000059

存档目的地B.txt (我需要一批能提供此结果的批次)

7895537000011,3
7895537000028,4
7895537000035,1
7895537000042,1
7895537000059,3
7895537000066,1

setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in (Inventario_%loja%_%dia%-%mes%-%ano%_%hour%h%min%m%secs%s.inv) do (
    echo %%a,1 >>C:\Inventario\Inventario_%loja%_%dia%-%mes%-%ano%_%hour%h%min%m%secs%s\Inventario_%loja%_%dia%-%mes%-%ano%_%hour%h%min%m%secs%s.log
)

我尝试编辑上面的脚本,但是效果不佳,我不知道从哪里开始。

2 个答案:

答案 0 :(得分:4)

  • 清除环境变量
  • 使用for /f读取文件,并将递增计数存储在var _[number]
  • 遍历变量_[number]和输出计数。

:: Q:\Test\2018\07\12\SO_51312947.cmd
@Echo off
Set "FileIn=SO_51312947_a.txt"
Set "FileOut=SO_51312947_b.txt"

:: clear Env vars _[]
For /f "delims==" %%A in ('set _[ 2^>Nul') Do set "%%A="

:: read file, count entries
For /f "usebackq" %%A in ("%FileIn%") Do Set /A "_[%%A]+=1"

:: output environment vars
( For /f "Tokens=1-3delims=[]=" %%A in ('Set _[') do Echo %%B,%%C
) > "%FileOut%"
Type "%FileOut%"

示例输出:

> SO_51312947.cmd
7895537000011,3
7895537000028,4
7895537000035,1
7895537000042,1
7895537000059,3
7895537000066,1

答案 1 :(得分:0)

这是使用sort对输入文件进行排序,使用for /Ffindstr搜索重复项并使用find进行计数的另一种方法:

@echo off
set "_FILE=A.txt"
set "PREV="
for /F delims^=^ eol^= %%L in ('sort "%_FILE%"') do (
    set "LINE=%%L"
    setlocal EnableDelayedExpansion
    set "SRCH=!LINE:\=\\!"
    set "LINE=!LINE:"=^""!" & rem ^"
    for /F %%K in ('findstr /X /C:"!SRCH:"^=\"!" "!_FILE!" ^| find /C "!LINE!"') do (
        endlocal
        set "CURR=%%L,%%K"
        setlocal EnableDelayedExpansion
        if not "!CURR!"=="!PREV!" echo(!CURR!
        endlocal
        set "PREV=%%L,%%K"
    )
)