在我的opac_one-hit * .log中,我有3列数字,用以下内容分隔; 我想在第三列中找到并重命名重复的数字,并使重复的数字看起来像number_1 ... number_2
@ECHO OFF
SETLOCAL enabledelayedexpansion
for /r %%# in ("opac_one-hit*.log") do (
FOR /F "usebackq skip=3 tokens=1,3 delims=;" %%G IN ( "%%~f#" ) DO ( echo %%H >> liste.txt
)
)
来自opac_one-hit * .log的示例:
"F96B1606";"216618711"; "BV499630491";
"F96B1607";"216618878"; "BV499630823";
"F96B1661";"216653304"; "BV49843883X";
"F96B1690";"216796148"; "BV49843883X";
结果:
第三列中的重复数字应如下所示"BV49843883X_1"
如果有两个重复项,则BV49843883X_1
和BV49843883X_2
答案 0 :(得分:1)
您未指定了所需的输出。此批处理文件是一个起点:
@echo off
setlocal EnableDelayedExpansion
for %%# in ("opac_one-hit*.log") do (
for /F "usebackq tokens=3 delims=; " %%G in ("%%~f#") do (
echo "%%~G!N3[%%~G]!"
set /A "C3[%%~G]+=1"
set "N3[%%~G]=_!C3[%%~G]!"
)
)
这是输出:
"BV499630491"
"BV499630823"
"BV49843883X"
"BV49843883X_1"
答案 1 :(得分:0)
可悲的是,您还没有完全显示您的输出应该是什么,所以我不得不让它完成任务。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
:: remove variables starting @
FOR /F "delims==" %%a In ('set @ 2^>Nul') DO SET "%%a="
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q49821253.txt"
SET "outfile=%destdir%\outfile.txt"
REM for /r %%a in ("%filename1%") do (
for %%a in ("%filename1%") do (
FOR /F "usebackq tokens=1,3 delims=;" %%G IN ( "%%~fa" ) DO (
CALL :bumpcount %%H
)
)
GOTO :EOF
:bumpcount
SET "col3=%~1"
(
IF DEFINED @%col3% (
SET /a @%col3%+=1
ECHO "%col3%_!@%col3%!"
) ELSE (
echo %1
SET /a @%col3%=0
)
)>> "%outfile%"
GOTO :eof
请注意,我已更改文件名以适合我的系统,从文件分析器中删除skip
并将for/r
替换为普通的for
进行测试。
如果要在每个新文件的开头重新开始编号,则需要将for /f
删除开始@
的变量移到for...%%G...
之前的行。不要在循环中使用::-comments
,而是使用REM
条评论。
首先,清除所有@
个变量。然后,在每一行上,将column3的内容传递给名为:bumpcount
的子程序
:bumpcount
将变量col3
设置为column3的值,删除封闭的引号。如果定义了变量@
+ column3,那么我们在过去遇到过这个值,所以增加它并将新的重复计数追加到column3的内容中;否则,只需将值输出为suplied,并将%
+ column3设置为0
,表示之前已经看到并且开始计算该特定值的后缀。
请注意(...)
语句周围的if defined
。这会将所有输出收集到重定向的目标。
由于您没有明确显示所需的输出,我只是在没有终端;
的情况下复制了column3,因为我认为它来自您的原始代码。