2013-07-17 33 views
5

Tôi có một tệp lô có các biến có độ dài thay đổi. Ví dụ đầu ra như sau:Căn chỉnh lô đầu ra thành các cột

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

Bởi vì 2 cột đầu tiên khác nhau về độ dài đầu ra, hãy xem tất cả các địa điểm. Có cách nào trong một tập tin batch để có các cột align? Tôi đã làm một số nghiên cứu và nó có vẻ như có một cách để làm điều đó bằng cách đệm các bó bắt đầu của nhân vật với không gian? Nhưng điều đó dường như không hoạt động? Có cách nào khác không?

+1

ok, cách duy nhất bạn có thể đạt được đáp ứng mong muốn của bạn sử dụng hàng loạt và một file .txt là bằng cách đặt độ dài tối đa cho tên và số chữ số trong kích thước. (Một con số như 15 có vẻ thuận lợi). Sau đó, bạn sẽ phải sử dụng soloution trong câu hỏi này: [link] (http://stackoverflow.com/questions/5837418/how-do-you-get-the-string-length-in-a-batch-file) để tìm độ dài của mỗi '% name%' và '% size%' và sau đó tạo một var sẽ tính đến các khoảng trắng này cũng như tên hoặc kích thước. Bằng cách này, mỗi chiều dài sẽ giống nhau trong tệp văn bản. Soloution cuối cùng sẽ là: – Monacraft

+1

Tìm độ dài của tất cả các biến '% name%' và '% size%', xác định biến nào lớn nhất cho cả hai, và thay thế tập số tối đa (đề xuất là 15) bằng kích thước của tên và kích thước chiều dài lớn nhất và theo cách này, "ô đệm" của bạn sẽ chiếm ít không gian nhất có thể và mặc dù điều này sẽ thêm nhiều mã vào chương trình của bạn, nó sẽ làm cho nó tốt hơn và có khả năng được sử dụng cho nhiều thứ hơn (sau khi thích nghi) – Monacraft

Trả lời

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 

demo này nên đặt bạn đi đúng hướng ...

ra là

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