2013-10-25 40 views
0

我有output.txt的其中內容將每天更換,但格式會是總喜歡在下面的文本文件:文本文件格式和對齊

Minimum text string length= 5 
Maximum text string length= 22 
Maximum numeric string would be only upto 2 digit before and after decimal. 

output.txt的

OPERATINGSYSTEM SERVER1 SERVER2 
Windows 1.36  4.42 
Linux12 2.78  5.76 
MacOS  3.45  6.39 
Ubuntu  4.12  0.00 
Android  0.00  3.46 
FreePhysicalMemory 30.12  31.65 
TotalVisibleMemorySize 48.00  48.00 

我想將內容正確地設置並格式化爲:

OPERATINGSYSTEM   SERVER1 SERVER2 
Windows     1.36  4.42 
Linux12     2.78  5.76 
MacOS     3.45  6.39 
Ubuntu     4.12  0.00 
Android     0.00  3.46 
FreePhysicalMemory  30.12  31.65 
TotalVisibleMemorySize 48.00  48.00 

下面我試過,但沒有輸出我得到:

@ECHO OFF 
SETLOCAL 
SET "spaces=       " 
SET "OPERATINGSYSTEM=MacOS" 
SET /a SERVER1=3.45 
CALL :formatout 
SET "OPERATINGSYSTEM=TotalVisibleMemorySize" 
SET /a SERVER1=48.00 
CALL :formatout 
GOTO :EOF 
:formatout 
CALL :padright name 15 
CALL :padleft size 11 
ECHO +%OPERATINGSYSTEM %+%SERVER1%+%SERVER2% 
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 

EDIT1

output.txt的是如下:

OPERATINGSYSTEM   PROJECTSERVER1 PROJECTSERVER2 
Windows  1.36   4.42 
Linux12  2.78  5.76 
MacOS  3.45  6.39 
Ubuntu  4.12  0.00 
Android  0.00  3.46 
FreePhysicalMemory  30.12  31.65 
TotalVisibleMemorySize  48.00  48.00 
CPULoadPercentage  2   4 

我與所有可能的組合嘗試t1和t2中的空間長度,但沒有變得完全分開newoutput.txt文件爲:

OPERATINGSYSTEM  PROJECTSERVER1 PROJECTSERVER2 
Windows      1.36    4.42 
Linux12      2.78    5.76 
MacOS       3.45    6.39 
Ubuntu      4.12    0.00 
Android      0.00    3.46 
FreePhysicalMemory   30.12   31.65 
TotalVisibleMemorySize  48.00   48.00 
CPULoadPercentage    2    4 

代碼我使用:

@ECHO OFF &SETLOCAL 
set "t1=      " 
set "t2=   " 
(for /f "tokens=1-3" %%a in (Managed.txt) do (
set "v1=%%a%t1%"&set "v2=%t2%%%b"& set "v3=%t2%%%c" 
call echo(%%v1:~0,25%%%%v2:~-14%%%%v3:~-14%% 
))>newoutput.txt 

回答

2
@echo off 
    setlocal 

    for /f "tokens=1-3" %%f in (output.txt) do call :formatOut %%f %%g %%h 

    endlocal 
    exit /b 

:formatOut 
    setlocal 
    set "spaces=          " 
    set col1=%~1%spaces% 
    set col1=%col1:~0,30% 
    set col2=%spaces%%~2 
    set col2=%col2:~-7% 
    set col3=%spaces%%~3 
    set col3=%col3:~-7% 

    echo %col1% %col2% %col3% 

    endlocal 
    goto :EOF 

要生成的文件輸出,調用爲formatData.cmd > finalFile.txt

+0

在那裏我可以加我輸入的文本文件..? – Sunny

+0

for/f「tokens = 1,2,3」%% f in(output.txt)do call:formatOut %% f %% g %% h –

+0

輸出重定向不工作..我把'> Newoutput。 'echo%col1%%col2%%col3%'之後的'txt'。 – Sunny

0

從GNU utils的安裝awk和使用這個(假設你的信息是文件「a」):

awk '{printf("%-24s %12s %12s\n",$1,$2,$3)}' a 
+0

這不適用於Windows! – Endoro

+0

Mark..AWK真棒..但我必須安裝二進制文件在我限制的窗口。 – Sunny

6

嘗試:

@ECHO OFF &SETLOCAL 
set "t1=     " 
set "t2=  " 
(for /f "tokens=1-3" %%a in (output.txt) do (
    set "v1=%%a%t1%"&set "v2=%t2%%%b"& set "v3=%t2%%%c" 
    call echo(%%v1:~0,25%%%%v2:~-8%%%%v3:~-8%% 
))>out.txt 

out.txt

 
OPERATINGSYSTEM   SERVER1 SERVER2 
Windows      1.36 4.42 
Linux12      2.78 5.76 
MacOS      3.45 6.39 
Ubuntu      4.12 0.00 
Android      0.00 3.46 
FreePhysicalMemory   30.12 31.65 
TotalVisibleMemorySize  48.00 48.00 

+1

+1,雖然我會使用延遲擴展 – dbenham

+0

我從來沒有想過它可以在這樣一個小代碼完成..工作..感謝..! – Sunny

+0

@ Endoro ..請參閱** EDIT1 **問題.. :) – Sunny