Localizar códigos de erro no arquivo .TXT

0

Sou novato no mundo da codificação, alguém pode me ajudar com o cenário abaixo?

Eu preciso de um script em lote para o Windows que faça o seguinte:

Digitalize o arquivo * .txt na pasta "Entrada" para descobrir se há algum "Códigos de erro", como 503 , 504 , 511 e 611 (cenário mencionado abaixo);

Abaixo está o arquivo .txt de amostra, em que toda a primeira linha não possui dados e pode ser ignorada; as seguintes linhas têm dados em que o lote deve varrer e encontrar os códigos de erro (se houver) entre 18 a 20 caracteres apenas, cada linha possui 90 caracteres, incluindo espaços.

H0001200008143800120918155209
D43442371013477773520000001280012091800001
D43442371011722225110000000900012091800001
D43442371007692925040000007200012091800001

Se algum arquivo .txt tiver os códigos de erro mencionados acima, esse arquivo não deverá ser movido para a pasta "Verificado" se nenhum código de erro for encontrado, então o arquivo .txt deverá ser movido para a pasta "Verificado".

    
por user9749652 13.09.2018 / 14:36

3 respostas

1

Isso deve funcionar em Powershell. Ele lê a primeira letra de cada linha, se não for D, não irá verificar se há um código de erro.

Se a linha começar com a letra D, ela lerá entre o 17º e o 20º caractere e exibirá os códigos de erro, se for 503, 504, 511 ou 611. Espero que isso ajude.

$content = Get-Content -path C:\USERS\path\to\codes.txt
foreach ($line in $content)
 {
   $firstLetter = $line.Substring(0,1)

    if ($firstLetter -eq "D")
     {
       $errorCode = $line.Substring(17,3)
       switch ($errorCode)
       {
          '503'
         {
           Write-host $errorCode
         }
         '504'
         {
           Write-host $errorCode
         }
         '511'
         {
           Write-host $errorCode
         }
         '611'
         {
           Write-host $errorCode
         }
       }
     }
  }

Minha entrada foi um arquivo txt contendo

H0001200008143800120918155209
D43442371013477773520000001280012091800001
D43442371011722225110000000900012091800001
D43442371007692925040000007200012091800001

A saída do script é

511
504
    
por 13.09.2018 / 15:30
0

Você pode usar um loop FOR para iterar os arquivos .txt e usar FINDSTR para testar cada arquivo se ele contiver um dos 4 erros e mover condicionalmente o arquivo se a string de pesquisa não for encontrada. As capacidades de expressão regular são bastante debilitadas, portanto, a pesquisa é mais complicada do que deveria ser.

Eu não estou em uma máquina Windows no momento, então não posso testar, mas o seguinte deve funcionar, a menos que eu tenha algum bug bobo que deve ser corrigido facilmente.

@echo off
set local
set "beg=^D................"
for %%F in (input\*.txt) do findstr /r "%beg%503 %beg%504 %beg%511 %beg%611" "%%F" >nul || move "%%F" verified
    
por 14.09.2018 / 04:17
0

@Sonamor, este código está correto? Por favor, ajude-me a corrigi-lo:

$content = Get-Content -path D:\ARAT\ARAT_Preverification\*.txt
foreach ($line in $content)
 {
   $firstLetter = $line.Substring(0,1)

    if ($firstLetter -eq "D")
     {
       $errorCode = $line.Substring(17,3)
       switch ($errorCode)
       {
          '501'
         {
           Write-host $errorCode
         }
         '502'
         {
           Write-host $errorCode
         }
         '503'
         {
           Write-host $errorCode
         }
         '504'
         {
           Write-host $errorCode
         }
         '505'
         {
           Write-host $errorCode
         }
         '506'
         {
           Write-host $errorCode
         }
         '507'
         {     
           Write-host $errorCode
         }
         '508'
         {
           Write-host $errorCode
         }
         '509'
         {
           Write-host $errorCode
         }
         '611'
         {
           Write-host $errorCode
         }
       }
     }
  }
 get-childitem -file -path "D:\ARAT\ARAT_Preverification\" | where {($_.extension -eq '*.txt' -and $_ -like '501','502','503','504','505','506','507','508','509')} | move-item -Destination "D:\ARAT\ARAT_Verified\"
    
por 14.09.2018 / 15:03