Batch file 使用批处理查找和更改列中的重复值
在我的opac_one-hit*.log中,我有3列数字,这些数字用分隔; 我想在第三列中找到并重命名重复的数字,使重复的数字看起来像数字\u 1。。。数字2Batch file 使用批处理查找和更改列中的重复值,batch-file,Batch File,在我的opac_one-hit*.log中,我有3列数字,这些数字用分隔; 我想在第三列中找到并重命名重复的数字,使重复的数字看起来像数字\u 1。。。数字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#"
@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
很遗憾,您没有准确地显示您的输出应该是什么,所以我不得不把它留给您来完成任务
@ECHO关闭
SETLOCAL ENABLEDELAYEDEXPANSION
::删除开始时的变量@
对于/F“delims=”('set@2^>Nul')中的%%a,请执行设置“%%a=”
设置“sourcedir=U:\sourcedir”
设置“destdir=U:\destdir”
设置“filename1=%sourcedir%\q49821253.txt”
设置“outfile=%destdir%\outfile.txt”
“%filename1%”中/r%%a的REM是否(
对于(“%filename1%”中的%%a,请执行以下操作(
对于/F“usebackq令牌=1,3 delims=;”%%G IN(“%%~fa”)DO(
呼叫:bumpcount%%H
)
)
后藤:EOF
:颠簸计数
设置“col3=%~1”
(
如果定义@%col3%(
设置/a@%col3%+=1
回显“%col3%”@%col3%!“
)否则(
回显%1
设置/a@%col3%=0
)
)>>“%outfile%”
后藤:eof
请注意,我已经更改了文件名以适应我的系统,从文件分析器中删除了跳过
,并将for/r
替换为普通的for
以进行测试
如果要在每个新文件的开头重新开始编号,则需要将/f的用于删除以@
开头的变量的移动到…%%G..
的之前的行。不要在循环中使用::-comments
,而是使用REM
注释
首先,清除所有@
变量。然后,在每一行上,将column3的内容传递给名为:bumpcount
:bumpcount
将变量col3
设置为column3的值,删除括起来的引号。如果定义了变量@
+column3,那么我们在过去遇到过这个值,所以增加它并将新的重复次数附加到column3的内容中;否则,只需按supplied和se输出值即可t%
+第3列至0
,表示之前已看到该值,并开始该特定值后缀的计数
请注意(…)
(如果已定义)语句周围的,
。这将收集到重定向目标的所有输出
由于您没有显式显示所需的输出,因此我只是复制了第3列,没有终端;
,因为我假设它是从您的原始代码中出现的。您没有指定所需的输出。此批处理文件是一个起点:
@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"
请显示输入文件的示例和所需结果。@Magoo示例和结果被添加。我有点混淆。第三列中的所有字符串是否都得到\u 1
,或者如果有重复的字符串,是否只得到\u 1
?请根据您的输入提供一个更好的输出示例。这将彻底澄清它。