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

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

Новый участник


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

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


Спасибо топикстартеру!!! Отличный скрипт.
Однако, начиная с Win7 мелкософты либо накосячили, либо намеренно начали триммировать слева строки при выводе через <nul set /p, в результате терялись пробелы.
Та же петрушка и в Win10

Придумал следующее решение:

Заменить в блоках :TWrite и :TQuickWrite
вывод <nul Set /P $Text=%$Text:~0,1% на условный через проверку:
IF "%$Text:~0,1%"==" " (<nul Set /p s=". ")ELSE (<nul Set /P $Text=%$Text:~0,1%) - т.е. строка начинается с точки, за ней следует BackSpace и только потом пробел.

Пример:
Код: Выделить весь код
:TWrite
Rem Посимвольный вывод с имитацией эффекта печатной машинки.
Rem В отличии от Echo, не переводит на новую строку в конце текста.
If Not Defined $Text Set $Text=%~1
If Not Defined $Text Exit /B
::Начиная с Win7 просходит триммирование строки спереди, т.е. пробелы игнорируются, поэтому приходится изворачиваться
IF "%$Text:~0,1%"==" " (<nul Set /p s=". ")ELSE (<nul Set /P $Text=%$Text:~0,1%)  
Ping -n 1 127.0.0.1>nul 
Set $Text=%$Text:~1%
If Defined $Text (GoTo :TWrite) Else (Exit /B)

:TQuickWrite
Rem То же самое, что и TWrite, но без задержки
If Not Defined $Text Set $Text=%~1
If Not Defined $Text Exit /B
::Начиная с Win7 просходит триммирование строки спереди, т.е. пробелы игнорируются, поэтому приходится изворачиваться
IF "%$Text:~0,1%"==" " (<nul Set /p s=". ")ELSE (<nul Set /P $Text=%$Text:~0,1%)  
Set $Text=%$Text:~1%
If Defined $Text (GoTo :TQuickWrite) Else (Exit /B)

Последний раз редактировалось Vadim.Repin@vk, 21-03-2021 в 15:32.


Отправлено: 15:26, 21-03-2021 | #5