Сделать пакетный файл работать в фоновом режиме командной строки, продолжая использовать командную строку

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

@echo off
set NUM=0 1 2 3 4 5 6 7 8 9 A B C D E F
for %%x in (%NUM%) do ( 
    for %%y in (%NUM%) do (
        color %%x%%y
        timeout 1 >nul
    )
)

Это красиво меняет цвета переднего плана или фона каждую секунду. Однако, я хочу, чтобы этот скрипт запускался автоматически каждый раз, когда я открываю ярлык командной строки. Поэтому в моих свойствах ярлыка я устанавливаю "Target" следующим образом:

ярлык Цель:

C:Windowssystem32cmd.exe / k автоматическое изменение цвета текста.летучая мышь

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

есть ли способ запустить это в фоновом режиме и продолжать использовать командную строку при изменении цвета?

если нет, есть ли другой способ сделать то, что Я хочу сделать? Может быть, с Java, perl или что-то кроме пакетного файла?

Спасибо за помощь.

20
задан horatio
17.11.2022 3:14 Количество просмотров материала 3356
Распечатать страницу

4 ответа

это немного сложно, потому что вы не хотите, чтобы процесс изменения цвета фона перехватывал любой из ваших консольных входов. Вы можете добавить параметр /NOBREAK в команду TIMEOUT, чтобы скрипт никогда не читал stdin, за исключением того, что он все еще может обрабатывать a <CTRL-Break> interupt и спросите, хотите ли вы завершить сценарий. Пользователь может ответить Y и завершить фоновый процесс, но это может привести к путанице, если основной процесс также имеет пакетный сценарий. Какой процесс получает данные?

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

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

@echo off
set NUM=0 1 2 3 4 5 6 7 8 9 A B C D E F
for %%x in (%NUM%) do (
  for %%y in (%NUM%) do (
    color %%x%%y
    >nul ping localhost -n 2
  )
)
color 07

следующая команда используется для запуска скрипта в фоновом режиме с stdin перенаправляют nul:

start "" /b cmd /c "auto-change-text-color.bat <nul"

единственный странный побочный эффект заключается в том, что фоновый процесс все еще может получать <CTRL-Break>, и он выводит сообщение Terminate batch job (Y/N)?, но сразу продолжается, не дожидаясь ввода. Таким образом, вы можете смело запускать пакетный скрипт в основном процессе, issue <CTRL-Break> и получите два сообщения Terminate и нажмите Y или N, зная, что только пакетный скрипт в вашем основном процессе ответит (terminate или not).

1
отвечен dbenham 2022-11-18 11:02

следующая команда будет делать то, что вы хотите:

start /b "" "%COMSPEC%" /c auto-change-text-color.bat

он запустит экземпляр CMD.EXE (или как там тебя COMSPEC is) работает в фоне активного окна консоли, выполняя auto-change-text-color.bat пока пакетный файл заканчивается, когда фон CMD.EXE прекращается.

1
отвечен Woody 2022-11-18 13:19

спасибо @dbenham и @Woody за вашу помощь. Используя ваши ответы, я смог сделать именно то, что хотел.

в итоге я использую это как мое автоматическое изменение цвета текста.летучая мышь команда, потому что я в конечном итоге хотел только текст, чтобы изменить, хотел, чтобы это продолжалось вечно, и избавился от некоторых цветов, которые не выглядели хорошо с белым (F) фон:

@echo off
:loop
set NUM=0 1 2 3 4 5 6 8 9 A B C
for %%x in (%NUM%) do ( 
    color F%%x
    >nul ping localhost -n 4
)
goto loop

что касается моего ярлыка командной строки Windows, он начинается в моем каталоге разработки, а "мишень" - это:

%COMSPEC% /t:F9 /s /k cd scripts && start /b %COMSPEC% /c auto-change-text-color.bat <nul && cd .. && env

Он открывается в каталоге сценариев моей среды разработки, запускает сценарий изменения цвета в фоновом режиме, который хранится в папке "Мои сценарии", затем возвращается в родительскую папку и запускает другой пакетный файл, устанавливающий все мои переменные среды. Все идеально. Еще раз спасибо!

0
отвечен user1776193 2022-11-18 15:36

в Linux & (амперсанд) используется для выполнения фоновых задач. Понятия не имею о победе, но попробуй C:\Windows\system32\cmd.exe /k auto-change-text-color.bat &

-1
отвечен cox 2022-11-18 17:53

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх