源文件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
)
我尝试编辑上面的脚本,但是效果不佳,我不知道从哪里开始。
答案 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 /F
和findstr
搜索重复项并使用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"
)
)