使用配额作为分隔符在批处理脚本中跳过两行

问题描述 投票:0回答:1

我被困在一个已经与其他分隔符一起使用过多次的语句上。 我必须处理一个三行 TXT 文件,每行包含 26 个字段用引号分隔。 这是第二组为空的文件,这是一种可能的情况:

ID="a1i7Q000000gTynQAE" Machine="TEST" Dept="TEST" ExecutionDate="2023/11/17" 
Set 1="O14" Time="2023/11/17 18:33:09" MeasurementMode="Rad" A1="40.96" A2="41.65" A1Lenght="177" n1="133.75" C1="527" CAD="2.48" LAT="4.43" L="23.88" RoN="12.52" Diam="5.23"/ 
Set S="152" Time="2023/11/17 18:33:09" MeasurementMode="Deg" A1="NaN" A2="NaN" A1Lenght="NaN" n1="132.14" C1="NaN" CAD="NaN" LAT="NaN" L="NaN" RoN="NaN" Diam="NaN"/ 

在第一遍中,我必须提取数据 %%A、%%H、%%J、%%L、%%N、%%P 等,忽略第一行,在第二遍中,我必须忽略前两行。

result1.txt 的预期输出是

a1i7Q000000gTynQAE
"VV_A1_c" : 40.96
"VV_j32_a" : 41.65
177
.....

我使用的命令行如下:

for /f tokens^=1-26^ skip^=1^ delims^="^ %%A in ("out1.txt") do (
 ECHO %%~A >>result2.txt
 ECHO "VV_A1_c" : %%~H >>result1.txt
 ECHO "VV_j32_a" : %%~J >>result1.txt
 ECHO %%~L >>result1.txt
 .....

for /f tokens^=1-26^ skip^=2^ delims^="^ %%A in ("out1.txt") do (
 ECHO %%~A >>result2.txt
 ECHO "VV_A1_c" : %%~H >>result2.txt
 .....

...但无论我如何设置 ^ 分隔符,结果始终是“语法错误”或“不是预期的”。 请问谁能告诉我哪里错了?

另一个问题:如果字段变成 30,我必须在 %%Z 之后使用什么字母?

quotes skip
1个回答
0
投票

尝试使用 Windows 批处理使其工作:

@echo off

SETLOCAL ENABLEDELAYEDEXPANSION
set A=0
echo A:%a%::
for /f delims^=^"^ tokens^=1-26 %%B in (out1.txt) do (
    SET /A A=!A!+1
    IF !A! GEQ 2 (
         echo Line!A!:FieldB:%%B
         echo Line!A!:fieldC:%%C
         echo Line!A!:FieldD:%%D
         echo Line!A!:FieldZ:%%Z
         echo.
    )
)

输出:

A:0::
Line2:FieldB:Set 1=
Line2:fieldC:O14
Line2:FieldD: Time=
Line2:FieldZ: Diam=

Line3:FieldB:Set S=
Line3:fieldC:152
Line3:FieldD: Time=
Line3:FieldZ: Diam=

但是

skip=
需要太多的解决方法,而我远不及你

也许一个简单的方法是 PowerShell:

Import-CSV out1.txt -Delimiter '"' -Header ('a','b','c','d') | Format-Table

输出:

a      b                  c        d
-      -                  -        -
ID=    a1i7Q000000gTynQAE Machine= TEST
Set 1= O14                Time=    2023/11/17 18:33:09
Set S= 152                Time=    2023/11/17 18:33:09

对于您的预期输出,这可能始于:

Import-CSV out1.txt -Delimiter '"' -Header ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r') | Format-Table a,h,i,j,l,n,p

输出:

a      h          i   j     l   n      p
-      -          -   -     -   -      -
ID=    2023/11/17
Set 1= 40.96      A2= 41.65 177 133.75 527
Set S= NaN        A2= NaN   NaN 132.14 NaN

而且,PowerShell 的学习曲线(陡峭?),我不太熟悉...😉

© www.soinside.com 2019 - 2024. All rights reserved.