Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Пользователь


Сообщения: 148
Благодарности: 39

Профиль | Сайт | Отправить PM | Цитировать


Foreigner, спасибо. То, что нужно.

Iska, визуализация (имена файлов/номера строк выделяются другим цветом)

Баг:
Код: Выделить весь код
echo  >s
findstr /V /a:0d "1" "*"
Разрабы забыли в коде команды поставить точку возле эха )

Польза в том, что я хотел на основе этого сделать разноцветный вывод в консоль.
Но у MS другие понятия о красоте.
Добавил ключ /M, а оно взяло и обесцветило имя файла
Да и все печатается с переносом каретки, BackSpace не применить.

Ничего более умного не придумал:
Код: Выделить весь код
@echo off
SetLocal
mode con: cols=60 lines=10
Color 9A

Set Text=Maded by Dragokas
Set Color=1A
::left, right, center
Set Alignment=right

Call :ColorText "%text%" "%color%" "%Alignment%"
Call :ColorText "Working with Colors" "1d" "center"
Echo Press any key...
pause>nul
goto :eof

:ColorText %1-in.Text %2-in.Color.HEX %3-Alignment
  Call :SetTextPosition "%~1" "%~3"
  md "%temp%\_bin2" 2>nul
  pushd "%temp%\_bin2"
  echo.>"%~1"
  findstr /V /a:%~2 "1" "*"
  popd
  rd /s /q "%temp%\_bin2"
  Exit /B

:SetTextPosition %1-in.Text %2-in.Alignment
  if /i "%~2" neq "left" (
    call :GetConsoleWidth _ConWidth
    call :var_count "%~1" _len
    SetLocal EnableDelayedExpansion
    if /i "%~2"=="right" (
      Set /A _ind=!_ConWidth!-!_len!-1
      Call :indent !_ind!
    )
    if /i "%~2"=="center" (
      Set /A _ind=^(!_ConWidth!-!_len!^)/2
      Call :indent !_ind!
    )
    EndLocal
  )
  Exit /B

:GetConsoleWidth %1-out.ConsoleWidth
  For /F "skip=4 tokens=2" %%w In ('mode con') Do Set %~1=%%w& Exit /B

:var_count %1-in.Text %2.out.Len.of.Text
  set _var=%~1& set _count=0
  :count--
  set _var=%_var:~1%
  set /a _count+=1
  if not defined _var (set %~2=%_count%& exit /b) else (goto :count--)

:indent %1-in.Count.of.Spaces
  SetLocal EnableDelayedExpansion
  ::Здесь нужно заменить символ ниже на BackSpace (код 0x08) <<<<<---------
  Set _BS=
  Set _Spaces=
  for /L %%C in (1,1,%~1) do Set "_Spaces=!_Spaces! "
  <nul set /p "_Spaces=_%_BS%%_Spaces%"
  EndLocal& Exit /B
4-я строка снизу Set _BS= здесь поставить символ BackSpace (0x08)

Ограничения кода:
1) В конце строки всегда печатается символ "двоеточие".
2) Нельзя печатать текст из символов, которые не могут быть использованы в имени файла |\:"<>?/*, а также . (точка) и другие служебные CMD.
3) Строка всегда заканчивается переносом каретки.
4) В сценарии используется символ BackSpace (для функции отступа), который нельзя создать обычным блокнотом ^_^

-------
Alex Dragokas


Последний раз редактировалось Dragokas, 27-03-2013 в 02:08.

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:53, 27-03-2013 | #5