使用批

时间:2018-04-13 16:13:32

标签: batch-file

在我的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_1BV49843883X_2

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,因为我认为它来自您的原始代码。