我编写了一个简单的批处理文件来解析日志文件并在屏幕上打印出所需的数据。除了我的输出没有按照我希望的那样正确对齐之外,我的一切都在工作。这是我的批处理脚本:
@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
如何做到这一点?
答案 0 :(得分: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 /?