2013-07-17 33 views
5

Değişken uzunluğa sahip değişkenleri alan bir toplu iş dosyası var. Örneğin çıktısı şu şekildedir:Toplu çıktıyı sütunlara hizalama

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

ilk 2 sütun uzunluğu farklı olduğundan çıkış biryere görünüyor. Sütunların hizalanması için bir toplu iş dosyasında herhangi bir yolu var mı? Bazı araştırmalar yaptım ve karakterlerin başlangıçtaki gruplarını boşluklarla doldurmak için bir yol var gibi görünüyor mu? Ama bu işe yaramıyor mu? Başka bir yolu var mı?

+1

Tamam, sen toplu kullanarak istediğiniz tepkiyi elde edebilirsiniz tek yolu ve bir .txt dosyasıdır ad için maksimum uzunluk ve boyuttaki basamak sayısı ayarlanarak. (15 gibi bir sayı uygun görünecektir). Öyleyse bu sorudaki solukluğu kullanmak zorunda kalacaksınız: [link] (http://stackoverflow.com/questions/5837418/how-do-you-get-the-string-length-in-a-batch-file) % '% name%' ve '% size%' uzunluklarının uzunluğunu bulmak ve daha sonra bu boşlukların yanı sıra ad veya boyut için hesaplanacak bir var. Bu şekilde her biri metin dosyasında aynı uzunlukta olur. Nihai soloution aşağıdaki gibi olurdu: – Monacraft

+1

Tüm '% name%' ve '% size%' değişkenlerinin uzunluğunu bulun, hangisinin en büyük olduğunu belirleyin ve en fazla set sayısını (15 olarak belirtin) değiştirin. En büyük uzunluk ve büyüklüğün boyutuna göre, bu şekilde "hücre dolgunuzu" mümkün olduğunca az yer kaplar ve bu programınıza bir sürü kod ekleyeceğinden daha iyi ve mümkün daha fazla şey için kullanılabilir (adaptasyondan sonra) – Monacraft

cevap

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 

Bu demo doğru yolda belirlesin ...

çıkış

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