首页 > 解决方案 > 如何对齐相邻列中的重新查询输出

问题描述

这是我的代码

@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION

(   FOR /f %%a in (C:\r\input.txt) do (
        FOR /L %%s IN (1,1,1) DO SET "col%%s="
        SET col1=%%a
        echo !col1! >>info.csv
        FOR /F "tokens=1*delims= " %%G IN ('reg query "\\%%a\HKEY_LOCAL_MACHINE\HARDWARE\ACPI"') DO (
            FOR %%H IN ("%%~G") DO >>info.csv echo %%~nxH
        )))

这是input.txt

LIN35008665

这是output.csv

LIN35008655
DSDT
FACS
RSDT
SSD1

我希望output.csv看起来像这样:

LIN35008655
DSDT FACS RSDT SSD1

我应该尝试使用标签吗?

标签: batch-file

解决方案


构建列表的一种简单方法是字符串连接。下面使用宏在 for 循环期间构建和分隔列表(以及其他功能)。

演示脚本:

@Echo Off
Set "DLM=   "
 Set "List/A=(If "!$L:~0,1!"=="!DLM!" Set "$L=!$L:~1!")& Set "$L#=0"& For %%n in (1 2)Do if %%n==2 (For %%l in (!$L!)Do (Set "$L[!$L#!]=%%l"&Set /A "$L#+=1"))Else Set $L=!$L!!DLM!"
Setlocal EnableDelayedExpansion
FOR /F "tokens=1* delims= " %%G IN ('reg query "\\%ComputerName%\HKEY_LOCAL_MACHINE\HARDWARE\ACPI"') DO %List/A:$L=HardWare%%%~nG
(Echo/!HardWare!) 1>"output.csv"

使用子字符串修改在扩展时提供变量名称,DLM 可以修改为您选择的分隔符

上面的宏对于您的特定用途来说是多余的,因为它还跟踪有多少项目附加到列表中,并将列表值定义到数组中。

可以替代上述定义的满足您需求的最小版本List/A是:

 Set "List/A=For %%n in (1 2)Do if %%n==2 (If "!$L:~0,1!"=="!DLM!" Set "$L=!$L:~1!")Else Set $L=!$L!!DLM!"

推荐阅读