Как я могу использовать аргументы командной строки для управления пакетной программой, которая печатает многоцветный текст? - PullRequest
1 голос
/ 03 сентября 2011

У меня есть пакетный скрипт, который может отображать два или более цветов текста в одной строке в командной строке. (Ниже)

@echo off
SETLOCAL EnableDelayedExpansion
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
echo say the name of the colors, don't read

call :ColorText 0a "blue"
call :ColorText 0C "green"
call :ColorText 0b "red"
echo(
call :ColorText 19 "yellow"
call :ColorText 2F "black"
call :ColorText 4e "white"
pause
goto :eof

:ColorText
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof

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

cecho /blue hello world!

или

cecho blue "hello world!"

или что-то простое, где я могу предоставить цвет (желательно в виде строки, а не цветовой код) и текст (с кавычками или без).


Я не знаю, бесполезно ли это для вас, но эту часть скрипта можно сохранить:

echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof

(от ": ColorText" до конца скрипта) и сохраните его как «ColorText.bat» в «C: \ windows \ system32». Затем в другой половине сценария везде, где вы видите:

call :ColorText

Измените его на:

call ColorText

(опустить двоеточия) И сохраните этот скрипт как colors.bat в "C: \ windows \ system32". Затем откройте командную строку и введите «цвета». Вот как я хочу, чтобы это функционировало; никаких дополнительных команд, скриптов установки, путей к файлам; просто простая функция из одного или двух слов со всем этим грязным кодом, происходящим в фоновом режиме (вне поля зрения). Однако приведенная выше идея по-прежнему не позволяет мне указать свой собственный текст или цвет из командной строки .... какие-либо идеи?

Ответы [ 2 ]

2 голосов
/ 05 сентября 2011

РЕДАКТИРОВАТЬ: Взять 3

Создать папку C:\Utilities. Добавьте эту папку в переменную среды Path, чтобы Windows искала дополнительные сценарии и команды.

  1. Открыть панель управления, Система, Расширенные настройки системы (или «Дополнительно» в Windows XP), Переменные среды.
  2. В списке «Системные переменные» выберите переменную «Path».
    Не путайте эти следующие шаги!
  3. Нажмите Редактировать.
  4. Поместите курсор в конец строки и убедитесь, что текст не выделен.
  5. Добавьте текст ;C:\Utilities, включая точку с запятой. Не удаляйте другой текст.
  6. Нажмите ОК.
    Вздохни снова.
  7. Нажмите OK столько раз, сколько необходимо, чтобы закрыть все окна.

Возьмите скрипт, следующий за меткой :ColorText, и сохраните его в C:\Utilities\cecho.bat. Поставьте @ перед echo off, чтобы предотвратить появление echo off во время сценария.

CEcho.bat

@Echo Off
SetLocal EnableDelayedExpansion
For /F "tokens=1,2 delims=#" %%a In ('"Prompt #$H#$E# & Echo On & For %%b In (1) Do Rem"') Do (
Set "DEL=%%a"
)
<Nul Set /p ".=%DEL%" > "%~2"
FindStr /v /a:%1 /R "^$" "%~2" Nul
Del "%~2" > Nul 2>&1
EndLocal

Теперь вы можете использовать эту команду из любой командной строки или скрипта. Использование:

CEcho color "text"

Редактировать: В ответ на ваш комментарий:

Вы можете использовать слова для цветов, вставив следующие строки и заменив строку FindStr:

Set Color=%1
If %1==blue Set Color=9
If %1==red Set Color=C
etc...
FindStr /v /a:%Color% /R "^$" "%~2" Nul

Теперь вы можете ввести:

CEcho red "apple"
CEcho blue "water"
CEcho A "grass"
CEcho 6 "dirt"
CEcho 26 "tree"

Обратите внимание, что в слове цвета учитывается регистр.

1 голос
/ 05 сентября 2011

Вы можете использовать параметры пакета% 1,% 2, ...,% n в качестве параметра для цвета и содержимого

cecho 0a "hello world!"

@echo off
call :ColorText %1 "%~2"
...

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

cecho blue "hello"

@echo off
if "%1"=="red" set color=0c
if "%1"=="blue" set color=0b
if ...
call :ColorText %color% "%~2"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...