在批处理脚本中alignmentecho命令的输出

我已经写了一个简单的batch file来parsing日志文件,并在屏幕上打印出所需的数据。 我有一切工作,除了我的输出没有正确alignment的事实,因为我希望是。 这是我的批处理脚本:

@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 

如何才能做到这一点?

此批次代码对齐每个输出行上的注册号。

 @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 /?