2013-07-17 85 views
5

我有一個批處理文件,該文件採用可變長度的變量。例如,輸出是這樣的:將批量輸出對齊到列

%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% 

由於前兩列的長度不同,因此輸出會查看所有位置。批處理文件中是否有任何方式使列對齊?我已經做了一些研究,似乎有一種方法可以通過用空格填充開始的一堆字符來完成它?但這似乎並不奏效?有沒有別的辦法?

+1

OK,你可以使用批處理達到您想要的迴應的唯一途徑,.txt文件是通過設置名稱的最大長度和大小中的位數。 (像15這樣的數字看起來是有利的)。那麼你將不得不在這個問題中使用soloution:[link](http://stackoverflow.com/questions/5837418/how-do-you-get-the-string-length-in-a-batch-file)找到每個'%name%'和'%size%'的長度,然後創建一個var來解釋這些空間以及名稱或大小。這樣每個文本文件中的長度都是相同的。最終解決方案是: – Monacraft

+1

查找所有'%name%'和'%size%'變量的長度,確定哪個是最大的變量,並將最大數量集合(建議爲15)替換爲即最大長度名稱和大小的大小,這樣,「單元格填充」將佔用盡可能小的空間,儘管這會爲您的程序添加大量代碼,但它會使它更好,更有能力用於更多的事情(適應後) – Monacraft

回答

4
@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