2015-01-24 2 views
1

Я пытаюсь создать своего рода список, который выглядит примерно так:Различные Количество пространств В зависимости от переменной

echo thing1   thing2 
echo. 

Тогда в для цикла в список текстовых файлов в каталоге и немного информация, как это:

echo %var%   %var1% 
echo %var%   %var1% 
rem and so on 

Но независимо от того, какой длины переменного, не всегда будет 11 пространством, которые ставят его немного с заголовком.

Я знаю, что могу сделать код для определения длины и сохранения нескольких пробелов в переменной, а затем добавить ее.

Но мне было просто интересно, есть ли еще более простой способ.

+0

Ну, это зависит от того, какой файл списка для создания: текстовый файл (\ * .txt.) С фиксированными столбцами открыты позже в текстовом редакторе или через [значений, разделенных запятыми] (Http: // эн. wikipedia.org/wiki/Comma-separated_values) файл (\ *. csv), открытый позже в приложении для работы с электронными таблицами. – Mofi

ответ

0

Нет никакого упоминания о том, как именно струны берутся, поэтому я оставлю это вам. Вот как вы можете установить пробелы между двумя переменными, и результат будет иметь фиксированную длину.

@echo off 
rem http://ss64.org/viewtopic.php?id=424 

set max_len=25 


set "var11=thing1" 
set "var12=thing2" 

set "var21=thing1xxxxxx" 
set "var22=thing2" 

set "var31=thing1xxxxxx" 
set "var32=thing2" 

call :setSpaces var11 var12 
call :setSpaces var21 var22 
call :setSpaces var31 var32 



goto :eof 

:setSpaces var1 var2 [RtnVar] 
setlocal EnableDelayedExpansion 
set "var1=!%~1!" 
set "var2=!%~2!" 

call :strlen0 var1 len1 
call :strlen0 var2 len2 



set /a needed_spaces=%max_len%-%len1%-%len2% 
rem echo %needed_spaces% 
set "spaces=" 
for /l %%a in (1;1;%needed_spaces%) do (
    set "spaces=!spaces! " 
) 
set line=%var1%%spaces%%var2% 


endlocal&if "%~3" neq "" (set %~3=%line%) else echo %line% 



exit /b 0 
:strlen0 StrVar [RtnVar] 
    setlocal EnableDelayedExpansion 
    set "s=#!%~1!" 
    set "len=0" 
    for %%N in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
    if "!s:~%%N,1!" neq "" (
     set /a "len+=%%N" 
     set "s=!s:~%%N!" 
    ) 
) 
    endlocal&if "%~2" neq "" (set %~2=%len%) else echo %len% 
exit /b 
Смежные вопросы