2013-07-17 10 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% 

最初の2列の長さが異なるため、出力はすべての場所を調べます。バッチファイルに列を整列させる方法はありますか?私はいくつかの研究を行ってきました。文字の最初の束をスペースで埋めてやる方法があるようですね?しかし、それは動作していないようですか?多分別の方法がありますか?

+1

okです、あなたがバッチを使用して所望の応答を達成できる唯一の方法と.txtファイルがあります名前の最大長とサイズの桁数を設定します。 (15のような数字は好ましいと思われる)。次に、この質問でsoloutionを使用する必要があります:[リンク](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 
関連する問題