批处理脚本中echo命令的输出对齐

4

我已经编写了一个简单的批处理文件来解析日志文件并在屏幕上打印所需的数据。除了输出不像我希望的那样对齐之外,我其他所有工作都完成了。这是我的批处理脚本:

@echo off
setlocal
echo Name               Reg No.
echo -------------------------------------
for /f "tokens=1-3 delims=' " %%A in ('findstr "Registered" registration.log') do (
     echo %%B               %%C
)
endlocal

输出结果如下:
Name               Reg No.
-------------------------------------
Russel McDonald               28068906
Pete               23985688
David Antony               87681747
Jaques               71979798
Jayson Burgers               21343854
Allison Jameson               87446435

但我希望输出结果是:

Name               Reg No.
-------------------------------------
Russel McDonald    28068906
Pete               23985688
David Antony       87681747
Jaques             71979798
Jayson Burgers     21343854
Allison Jameson    87446435

如何实现这个?


1
“Name”字段的最大长度是多少? - SomethingDark
1个回答

4
这段批处理代码可以将每行输出中的注册号对齐。
@echo off
setlocal EnableDelayedExpansion
echo Name               Reg No.
echo -------------------------------------
for /f "tokens=2,3 delims=' " %%A in ('%SystemRoot%\System32\findstr.exe "Registered" registration.log') do (
    set "RegistrationName=%%A                   "
    echo !RegistrationName:~0,19!%%B
)
endlocal

我猜想文件registration.log是一个以制表符分隔的CSV文件,因此在delims='后面的字符是水平制表符。

对于对齐注册号的方法,它会在名称后添加19个空格,然后使用子字符串定义仅输出名称的前19个字符。

还有一种不使用findstr的版本:

@echo off
setlocal EnableDelayedExpansion
echo Name               Reg No.
echo -------------------------------------
for /f "tokens=1-3 delims=' " %%A in (registration.log) do (
    if /I "%%A" == "Registered" (
        set "RegistrationName=%%B                   "
        echo !RegistrationName:~0,19!%%C
    )
)
endlocal

为了理解使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。
  • echo /?
  • endlocal /?
  • findstr /?
  • for /?
  • if /?
  • set /?
  • setlocal /?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接