Text 将批处理输出对齐到列中

Text 将批处理输出对齐到列中,text,batch-file,cmd,alignment,Text,Batch File,Cmd,Alignment,我有一个批处理文件,它接受可变长度的变量。例如,输出如下所示: %name% - %size% - %percentage% - %percentMIN% - %percentMAX% %name% - %size% - %percentage% - %percentMIN% - %percentMAX% %name% - %size% - %percentage% - %percentMIN% - %percentMAX% %name% - %size% - %percentage% - %p

我有一个批处理文件,它接受可变长度的变量。例如,输出如下所示:

%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%
由于前两列的长度不同,因此输出会查看所有位置。在批处理文件中是否有任何方法使列对齐?我做了一些研究,似乎有一种方法可以做到这一点,用空格填充开始的一堆字符?但这似乎不起作用?还有别的办法吗

@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
例程开始。它为每个所需的填充操作调用:pad???,然后将结果串在一起形成一个输出行

:padright
需要两个参数。第一个是要填充其内容的变量的名称,第二个是要填充其内容的长度

CALL SET padded=%%%1%%%spaces%
使用解析技巧。
调用
cmd
子shell中执行
set
。在该子shell中执行的指令是

SET padded=%%.%1.%%.%spaces%
其中我使用了
来分隔语法元素

%%
这里有一个
转义-%%
,因为
%%
是它自己的转义字符(其他笨拙的字符,如
&
字符,您需要
转义
(即
^>
)来告诉批处理,这是需要的文本,而不是重定向操作

%1
替换为提供给例程的第一个参数,示例中为
name

所以实际执行的是

set padded=%name%%spaces%
在变量
name
的当前值末尾串上大量空格(注意,这篇文章太老了,它早于我现在使用的
set“var=value”
语法)

因此,
padded
现在包含
name
的值,并用许多空格填充

CALL SET %1=%%padded:~0,%2%%
第二节——差不多了。
set
命令执行完毕 集合%1.=.%。填充:~0、.%2.%

因为提供给
:padright
的第二个参数是
18

该命令将
填充的
的前18个字符分配给
名称


:padleft
的工作方式相同,但在变量值之前添加空格,然后选择最后一个(第二个参数值)字符。

好的,使用批处理和.txt文件实现所需响应的唯一方法是设置名称的最大长度和大小中的位数。(像15这样的数字似乎是有利的)。然后您必须在这个问题中使用soloution:找到每个
%name%
%size%
的长度,然后创建一个var,该var将解释这些空格以及名称或大小。这样每个变量在文本文件中的长度都相同。最终的soloution将是:找到所有 %name%
%size%
变量,确定这两个变量的最大值,并将最大值集(建议为15)替换为最大长度名称和大小的最大值集,这样,您的“单元格填充”将占用尽可能少的空间,尽管这将为您的程序添加大量代码,但它会使程序更好,并且能够用于更多的事情(改编后)。您可以进行设置/P测试=您可以解释:padright和:padlight是如何工作的吗?@ZaifSenpai Done。
 set test=A test
        set spce=                 .   
        set spce2=%spce:~0,16%
        set ntest=%test:~0,16%%spce2%
        set ntest2=%ntest:~0,16%

ECHO 123456789012345678  >> c:\temp\testfile.txt
echo %ntest2%^|other field>> c:\temp\testfile.txt
SET name=%padded:~0,18%
 set test=A test
        set spce=                 .   
        set spce2=%spce:~0,16%
        set ntest=%test:~0,16%%spce2%
        set ntest2=%ntest:~0,16%

ECHO 123456789012345678  >> c:\temp\testfile.txt
echo %ntest2%^|other field>> c:\temp\testfile.txt