2015-12-04 3 views
4

Я написал простой командный файл для анализа файла журнала и распечатки необходимых данных на экране. У меня все работает, за исключением того, что мой вывод не выравнивается должным образом, как хотелось бы. Вот моя партия сценарий:Выравнивание вывода команды echo в пакетном скрипте

@echo off 
setlocal 
echo Name    Reg No. 
echo ------------------------------------- 
for /f "tokens=1-3 delims=' " %%A in ('findstr "Registered" registration.log') do (
    echo %%B    %%C 
) 
endlocal 

Выход:

Name    Reg No. 
------------------------------------- 
Russel McDonald    28068906 
Pete    23985688 
David Antony    87681747 
Jaques    71979798 
Jayson Burgers    21343854 
Allison Jameson    87446435 

Но я хочу выход быть:

Name    Reg No. 
------------------------------------- 
Russel McDonald 28068906 
Pete    23985688 
David Antony  87681747 
Jaques    71979798 
Jayson Burgers  21343854 
Allison Jameson 87446435 

Как это можно сделать?

+1

Есть ли максимальная длина для того, как долго может быть поле «Имя»? – SomethingDark

ответ

4

Этот код партии выравнивает регистрационный номер на каждой выходной строке.

@echo off 
setlocal EnableDelayedExpansion 
echo Name    Reg No. 
echo ------------------------------------- 
for /f "tokens=2,3 delims=' " %%A in ('%SystemRoot%\System32\findstr.exe "Registered" registration.log') do (
    set "RegistrationName=%%A     " 
    echo !RegistrationName:~0,19!%%B 
) 
endlocal 

Я полагаю, что файл registration.log является табуляцией CSV-файл и, следовательно, характер после того, как delims=' горизонтальная табуляция.

Метод, используемый для выравнивания регистрационного номера, добавляет к имени 19 пробелов, а затем выводит только первые 19 символов из имени, используя определение подстроки. более

Один вариант без использования findstr:

@echo off 
setlocal EnableDelayedExpansion 
echo Name    Reg No. 
echo ------------------------------------- 
for /f "tokens=1-3 delims=' " %%A in (registration.log) do (
    if /I "%%A" == "Registered" (
     set "RegistrationName=%%B     " 
     echo !RegistrationName:~0,19!%%C 
    ) 
) 
endlocal 

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

  • echo /?
  • endlocal /?
  • findstr /?
  • for /?
  • if /?
  • set /?
  • setlocal /?
Смежные вопросы