在 .TXT 文件中查找错误代码

在 .TXT 文件中查找错误代码

我是编码世界的新手,有人可以帮助我解决以下情况吗?

我需要一个适用于 Windows 的批处理脚本来执行以下操作:

扫描“输入”文件夹中的 *.txt 文件,查找是否存在任何“错误代码”,例如503504511611(下面提到的场景);

下面是示例 .txt 文件,其中每个第一行都没有数据,可以忽略;接下来的几行有数据,批处理应该扫描并查找错误代码(如果有),仅在 18-20 个字符之间,每行有 90 个字符(包括空格)。

H0001200008143800120918155209
D43442371013477773520000001280012091800001
D43442371011722225110000000900012091800001
D43442371007692925040000007200012091800001

如果任何 .txt 文件具有上述错误代码,则不应将该文件移动到“已验证”文件夹;如果没有发现错误代码,则应将 .txt 文件移动到“已验证”文件夹。

答案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
         }
       }
     }
  }

我的输入是一个 txt 文件,其中包含

H0001200008143800120918155209
D43442371013477773520000001280012091800001
D43442371011722225110000000900012091800001
D43442371007692925040000007200012091800001

该脚本的输出是

511
504

答案2

您可以使用 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

相关内容