Como procurar por uma determinada palavra-chave que corresponda à variável no arquivo de lote

0

Eu pesquisei e experimentei várias questões e soluções publicadas neste site. Mas um principiante como eu não tem o cérebro para isso. O código abaixo funciona bem se eu colocar 1 string única. como alterar a variável de pesquisa para encontrar o valor da correspondência. Eu quero que funcione como: encontre GXNM AD Service na coluna 1 e imprima a saída em um arquivo. E alguém pode explicar isso também.

Meu CSV (input.csv):

Application,RequesterID,Date,VerifierID
"GX AD Service,""9900232"",""10/09/2014 17:51"",""9909142"""
"GX AD Service,""9900249"",""10/09/2014 17:51"",""9909142"""
"GXNT AD Service,""9900232"",""10/09/2014 17:51"",""9909142"""
"GXNT AD Service,""9900249"",""10/09/2014 17:51"",""9909142"""
"GXNM - Others - (Reset Staffs),""99001730"",""11/09/2014 9:00"",""99090615"""

Programa My Batch:

@echo off
cls
setlocal enabledelayedexpansion

set /p header=<input.csv
echo %header%>output2.csv

set column=1
set search=GXNM AD Service
cls

for /f "skip=1 tokens=*" %%A in (output.csv) do (
    set inline=%%A

    for /f "tokens=1-4 delims=," %%1 in ("!inline!") do (
    set col1=%%1&set col2=%%2&set col3=%%3&set col4=%%$
    findstr /rx 
    if !col%column%! equ !search! echo !inline!>>output2.csv
  )
)

type output2.csv
set "cmd=findstr /R /N "^^" output2.csv | find /C ":""
for /f %%a in ('!cmd!') do set number=%%a
echo %number%
    
por Baker 08.10.2014 / 09:42

1 resposta

0

Parece uma dor para trabalhar. Você pode usar o meu script jgrep.bat para isso.

@set @junk=1 /*
@echo off
cscript //nologo //E:jscript %0 %*
goto :eof
*/

args = WScript.Arguments
match = args(0);
if(match=="-t") match=args(1).replace("'", "\"");
var stdin = WScript.StdIn;
var stdout = WScript.StdOut;

// stdout.WriteLine("Arguments: "+match);

var regex = new RegExp(match);

while(!stdin.AtEndOfStream) {
    var sLine = stdin.ReadLine();
    if(regex.test(sLine)) stdout.WriteLine(sLine);
}

Eu consideraria isso (principalmente) auto documentando, mas se você tiver uma pergunta específica sobre isso, pergunte. Basta colocar esse arquivo em algum lugar do caminho e executá-lo assim:

cat input.csv|jgrep.bat "(AD Service|GXNM)"

Isso usa apenas uma expressão regular para corresponder às suas linhas. A expressão significa:

cat input.csv|jgrep.bat - Send the contents of input.csv to the jgrep.bat script.
(AD Service|GXNM) - Print only on lines which contain 'AD Service' or 'GXNM'.

É simples assim. Ah sim, se você preferir ter um cabeçalho e salvar os resultados em um arquivo, então ainda é um forro:

echo Application,RequesterID,Date,VerifierID>output.txt & cat input.csv|jgrep.bat "(AD Service|GXNM)">>output.txt
    
por 08.10.2014 / 10:21

Tags