我是编码世界的新手,有人可以帮助我解决以下情况吗?
我需要一个适用于 Windows 的批处理脚本来执行以下操作:
扫描“输入”文件夹中的 *.txt 文件,查找是否存在任何“错误代码”,例如503,504,511和611(下面提到的场景);
下面是示例 .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