gpt4 book ai didi

text - 将批处理输出对齐到列中

转载 作者:行者123 更新时间:2023-12-04 20:10:38 27 4
gpt4 key购买 nike

我有一个批处理文件,它采用可变长度的变量。例如输出是这样的:

%name% - %size% - %percentage% - %percentMIN% - %percentMAX%
%name% - %size% - %percentage% - %percentMIN% - %percentMAX%
%name% - %size% - %percentage% - %percentMIN% - %percentMAX%
%name% - %size% - %percentage% - %percentMIN% - %percentMAX%
%name% - %size% - %percentage% - %percentMIN% - %percentMAX%

因为前 2 列的长度不同,所以输出会查看所有地方。批处理文件中是否有任何方法可以使列对齐?我已经做了一些研究,似乎有一种方法可以通过用空格填充开头的字符来做到这一点?但这似乎不起作用?也许有另一种方式?

最佳答案

@ECHO OFF
SETLOCAL
SET "spaces= "
SET "somethingelse=Some other data"
SET "name=abc"
SET /a size=123
CALL :formatout
SET "name=abcdefghijkl"
SET /a size=12345678
CALL :formatout
SET "name=a"
SET /a size=3
CALL :formatout

GOTO :EOF

:formatout
CALL :padright name 18
CALL :padleft size 13
ECHO +%name%+%size%+%somethingelse%
GOTO :eof

:padright
CALL SET padded=%%%1%%%spaces%
CALL SET %1=%%padded:~0,%2%%
GOTO :eof

:padleft
CALL SET padded=%spaces%%%%1%%
CALL SET %1=%%padded:~-%2%%
GOTO :eof
这个演示应该让你走上正确的轨道......
输出是
+abc               +          123+Some other data
+abcdefghijkl + 12345678+Some other data
+a + 3+Some other data

它是如何工作的(回应评论)
:formatout
CALL :padright name 18
CALL :padleft size 13
ECHO +%name%+%size%+%somethingelse%
GOTO :eof
让我们从 :formatout 例程开始。它为每个所需的填充操作调用 :pad???`,然后将结果串在一起以形成输出行。 :padright 需要两个参数。第一个是要填充其内容的变量的名称,第二个是要填充的长度。
CALL SET padded=%%%1%%%spaces%
使用解析技巧。 callset 子 shell 中执行 cmd。在该子shell中执行的指令是
SET padded=%%.%1.%%.%spaces%
我使用 . 来分隔句法元素。 %% 这里是一个 escaped-% 因为 % 是它自己的转义字符(其他笨拙的字符,如 &><) 等。 ^ 例如。 ^& 。如果你想从字面上解释这个字符,你需要 escape 一个字符在批处理语法中有它的特殊含义。因此,如果您想对 echo 字符进行 >,则需要对 escape 进行 > (即 ^> )以告诉批处理它是所需的文字,而不是重定向操作。 %1 替换为提供给例程的第一个参数,在示例中为 name
所以实际执行的是
set padded=%name%%spaces%
将大量空格串到变量 name 的当前值的末尾(请注意,这篇文章太旧了,它早于我现在使用的 set "var=value" 语法的使用)
因此, padded 现在包含用许多空格填充的 name 值。
CALL SET %1=%%padded:~0,%2%%
第二节 - same as the first - 差不多。执行的 set 命令是
SET %1.=.%%.padded:~0,.%2.%%
或者
SET name=%padded:~0,18%
因为提供给 :padright 的第二个参数是 18
并且此命令将 padded 的前 18 个字符分配给 name:padleft 的工作方式相同,但在变量值之前添加空格,然后选择最后一个(第二个参数值)字符。

关于text - 将批处理输出对齐到列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17690649/

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