Remover linhas do arquivo de texto se uma string específica for encontrada


2

Eu não consigo descobrir como remover uma linha específica com o meu script em lotes para a saída é:

type: MD2
status: granted
date: 2016/03/11

type: MD2
status: detached
date: 2016/03/11

se o status for desanexado, o bloco de furos "type, date e status" não deve ser gravado / ignorado no arquivo de saída

então o que estou fazendo até agora:

@echo off
setlocal EnableDelayedExpansion
for /f "usebackq skip=10 tokens=1,5,9 delims= " %%a in ("Log.txt") do (
    set "date=%%a"
    set "type=%%b"
    set "status=%%c"
    echo %%c|find "more">nul && set "status=not granted"
    echo %%c|find "detached" >nul && set status=""
    echo type: !type!
    echo status: !status!
    echo date: !date!
    echo.
)>>Test.txt
pause

Exemplo de Log.txt:

2016/03/11 00:00:25:478 I LICENSESERV MD2 (Dassault Systemes V5) granted to client test (42FB1010C6B1ED82-0a292138.1)/172.1.1.1|d|d@EUROPE.S-1-5-21-1832937852-2116575123-337272265-547921.0A292138.1.GGL-42FB1010C6B1ED82|C:\Program Files\ANSYS Inc\v170\AISOL\bin\winx64\ReaderHostU.exe 
2016/03/11 00:01:28:461 I LICENSESERV MD2 (Dassault Systemes V5) detached by timeout from client test (42FB1010C6B1ED82-0a292138.1)/10.41.33.56|d|d@EUROPE.S-1-5-21-1832937852-2116575123-337272265-547921.0A292138.1.GGL-42FB1010C6B1ED82|C:\Program Files\ANSYS Inc\v

Por favor editar a questão e adicione algumas linhas de exemplo do arquivo de entrada Log.txt
DavidPostill

@DavidPostill sry para este i maid um erro e postou esta questão como um usuário não registrado.
Mingebag

@Mingebag Toda linha começa com a data? E isso é tudo uma linha longa?
DavidPostill


1
@Mingebag eu editei a pergunta, faz o exemplo Log.txt parece correto?
DavidPostill

Respostas:


1

Se o status for detached então não escreva o bloco "tipo, data e status"

Isso é fácil de fazer usando um E se comando.

Substituir:

echo %%c|find "more">nul && set "status=not granted"
echo %%c|find "detached" >nul && set status=""
echo type: !type!
echo status: !status!
echo date: !date!
echo.

Com:

if "!status!" NEQ "detached"  (
  echo type: !type!
  echo status: !status!
  echo date: !date!
  echo.
  )

Exemplo de entrada:

2016/03/11 00:00:25:478 I LICENSESERV MD2 (Dassault Systemes V5) granted to client test (42FB1010C6B1ED82-0a292138.1)/172.1.1.1|d|d@EUROPE.S-1-5-21-1832937852-2116575123-337272265-547921.0A292138.1.GGL-42FB1010C6B1ED82|C:\Program Files\ANSYS Inc\v170\AISOL\bin\winx64\ReaderHostU.exe 
2016/03/11 00:01:28:461 I LICENSESERV MD2 (Dassault Systemes V5) detached by timeout from client test (42FB1010C6B1ED82-0a292138.1)/10.41.33.56|d|d@EUROPE.S-1-5-21-1832937852-2116575123-337272265-547921.0A292138.1.GGL-42FB1010C6B1ED82|C:\Program Files\ANSYS Inc\v

Exemplo de saída:

type: MD2
status: granted
date: 2016/03/11

O que eu faço se eu também quiser excluir o status é detached; também?

Você pode remover o ; de !status!

Substituir:

set "status=%%c"

Com:

set status=%%c
set status=!status:;=!

Leitura Adicional


Eu sou sry ele funciona muito bem, graças a allot para sua resposta, pergunta rápida se eu quiser ter várias palavras para pesquisar na frase if eu só posso fazer se "! Status!" NEQ "destacado" & amp; & amp; NEQ "teste"?
Mingebag

@Mingebag 1 / Eu não acho que você pode fazer isso. 2 / Você está se referindo ao teste em "concedido ao teste do cliente"?
DavidPostill

não, não, na verdade, só quero filtrar mais uma palavra, já que também há "desapegada"; Curtiu isso
Mingebag

@Mingebag Ah. Está bem. Será mais fácil remover o ; de !status!. Me dê alguns minutos.
DavidPostill

que tal um segundo se? é que não é mais fácil
Mingebag
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.