2013-07-17 12 views
5

Ho un file batch che accetta variabili di lunghezza variabile. Ad esempio, l'output è simile al seguente:Allinea l'output batch nelle colonne

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

Poiché le prime 2 colonne variano in lunghezza, l'output viene visualizzato su tutto il luogo. C'è un modo in un file batch per allineare le colonne? Ho fatto delle ricerche e sembra che ci sia un modo per farlo riempendo il gruppo iniziale di personaggi con spazi? Ma quello non sembra funzionare? C'è forse un altro modo?

+1

ok, l'unico modo è possibile ottenere la risposta desiderata utilizzando batch e un file .txt è impostando una lunghezza massima per il nome e il numero di cifre nella dimensione. (Un numero come 15 sembrerebbe favorevole). Quindi dovresti utilizzare la soluizione in questa domanda: [link] (http://stackoverflow.com/questions/5837418/how-do-you-get-the-string-length-in-a-batch-file) per trovare la lunghezza di ogni '% name%' e '% size%' e quindi creare una var che dovrebbe tenere conto di questi spazi così come il nome o la dimensione. In questo modo ognuno di essi avrebbe la stessa lunghezza nel file di testo. L'ultima assolo sarebbe: – Monacraft

+1

Trova la lunghezza di tutte le variabili '% name%' e '% size%', determina quale è la più grande per entrambe e sostituisci il numero massimo impostato (suggerisci di essere 15) con quello della dimensione del nome e della dimensione della lunghezza maggiore, e in questo modo, il "riempimento cellulare" occuperebbe il minimo spazio possibile e, sebbene questo aggiungerebbe un sacco di codice al programma, lo renderebbe migliore e in grado di essere usato per più cose (dopo l'adattamento) – Monacraft

risposta

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 

Questa demo dovrebbe impostare sulla strada giusta ...

uscita è

+abc    +   123+Some other data 
+abcdefghijkl  +  12345678+Some other data 
+a     +   3+Some other data 
Problemi correlati