Недавно я узнал о coloringecho
в пакетных файлах и все выглядело хорошо, пока я не пробовал его в Windows XP. Эта ошибка (?) Не воспроизводится в более высоких версиях (по крайней мере, на w7, w8)Странная строка, заканчивающаяся цветным эхом на winXP (findstr)
Что именно заставляет . .
появляться после строки, когда она вызывается с call :cecho <colors> "<string>"
? Как избавиться от него и все-таки заставить его работать на winXP и выше?
@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"
)
call :cecho 03 "I am colorful, yay" & echo.
pause
exit
:cecho
@echo off
<nul set /p "=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
Выход:
I am colorful, yay:. .
Press any key to continue . . .
Edit: PS: Я не заинтересован во внешних программах, VBS или PowerShell. Чистое пакетное решение, пожалуйста.
Edit2:
Благодаря @sokin я нашел решение, однако @ решение Джеба каждый раз создает файл, но не удаляет его. Поэтому простой del
исправляет его.
@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 > X set /p ".=."
call :color 1a "a"
call :color 1b "b"
call :color 1c "^!<>&| %%%%"*?"
del "%~dp0X"
pause
exit
:color
set "param=^%~2" !
set "param=!param:"=\"!"
findstr /p /A:%1 "." "!param!\..\X" nul
<nul set /p ".=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%"
Попробуйте NirCmd (скачать здесь: http://www.nirsoft.net/utils/nircmd.html). Используйте его так: 'nircmdc setconsolecolor 10' - впоследствии текст будет напечатан зеленым цветом. – gordon
извините, не интересен в другом файле для изменения цвета. – KeyWeeUsr
Извините, не будет цветного текста. – gordon