Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用批处理查找和更改列中的重复值_Batch File - Fatal编程技术网

Batch file 使用批处理查找和更改列中的重复值

Batch 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#"

在我的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#" ) 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
?请根据您的输入提供一个更好的输出示例。这将彻底澄清它。