2016-03-12 3 views
2

Недавно я узнал о 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%" 
+0

Попробуйте NirCmd (скачать здесь: http://www.nirsoft.net/utils/nircmd.html). Используйте его так: 'nircmdc setconsolecolor 10' - впоследствии текст будет напечатан зеленым цветом. – gordon

+0

извините, не интересен в другом файле для изменения цвета. – KeyWeeUsr

+0

Извините, не будет цветного текста. – gordon

ответ

1

Как указано, findstr command has some strange behaviour.
В XP он заменяет символ обратного пространства точками.

Но когда созданный временный файл содержит точку вместо обратных пространств, проблема может быть решена.
Поэтому я строю второе решение, но, как сказал дбэнам, мой оригинальный код stil не может обрабатывать некоторые символы.

Карлос улучшили свою оригинальную идею быстрой и пуленепробиваемую версию на Dostips: Color function v19