Я новичок в мире программирования, кто-то может мне помочь с сценарием ниже?

Мне нужен пакетный скрипт для Windows, который делает следующее:

Отсканируйте файл * .txt в папке «Input», чтобы найти, есть ли «коды ошибок», такие как 503, 504, 511 и 611 (сценарий, упомянутый ниже);

Ниже приведен пример файла .txt, в котором каждая 1-я строка не содержит данных и может быть проигнорирована; В следующих строках содержатся данные, в которых пакет должен сканировать и находить коды ошибок (если они есть) только из 18-20 символов, каждая строка имеет 90 символов, включая пробелы.

H0001200008143800120918155209
D43442371013477773520000001280012091800001
D4344237101172222 511 0000000900012091800001
D4344237100769292 504 0000007200012091800001

Если какой-либо TXT-файл имеет вышеупомянутые коды ошибок, то этот файл не следует перемещать в папку "Verified", если коды ошибок не найдены, то TXT-файл следует перемещать в папку "Verified".

2 ответа2

1

Это должно работать в Powershell. Он читает первую букву каждой строки, если это не D, не проверяет код ошибки.

Если строка начинается с буквы D, она будет читаться между 17-м и 20-м символами и выводит коды ошибок, если это 503, 504, 511 или 611. Надеюсь это поможет.

$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
         }
       }
     }
  }

Мой вход был текстовый файл, содержащий

H0001200008143800120918155209
D43442371013477773520000001280012091800001
D43442371011722225110000000900012091800001
D43442371007692925040000007200012091800001

Выход скрипта

511
504
0

Вы можете использовать цикл FOR для итерации файлов .txt и использовать FINDSTR для проверки каждого файла, если он содержит одну из 4 ошибок, и условно переместить файл, если строка поиска не найдена. Возможности регулярных выражений довольно ограничены, поэтому поиск более сложен, чем должен быть.

Сейчас я не на Windows-машине, поэтому не могу протестировать, но должно работать следующее, если только у меня нет глупой ошибки, которую легко исправить.

@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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .