gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 14:13:33 26 4
gpt4 key购买 nike

我编写了一个简单的批处理文件来解析日志文件并在屏幕上打印出所需的数据。除了我的输出没有像我希望的那样正确对齐这一事实,我一切正常。这是我的批处理脚本:

@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/?
  • 如果/?
  • 设置/?
  • setlocal/?

关于windows - 在批处理脚本中对齐 echo 命令的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34085410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com