как отображать звездочками пароль в bat-файле
От: sentiment  
Дата: 19.03.16 12:00
Оценка:
Есть bat файл для быстрого подключения (и отключения) своего ya.disk`а на чужих компьютерах:

---------
net use X: https://webdav.yandex.ru /User:LOGIN
start X:
pause 0
net use x: /delete /y
---------

после ввода логина требуется вводить пароль, причем ввод пароля никак не отображается.
но в большинстве случаев, после ввода пароля выскакивает "ошибка 5".

экспериментальным путем установлено, что пароль надо вводить очень медленно, чтобы все было хорошо.
НЕльзя ли как-то так сделать. чтобы ввод пароля отображался хотя бы звездочками, или как иначе решить проблему?[/img]
Re: как отображать звездочками пароль в bat-файле
От: Кодт Россия  
Дата: 27.03.16 15:43
Оценка:
Здравствуйте, sentiment, Вы писали:

S>[url=https://1.downloader.disk.yandex.ru/disk/fcab7e5c4216cf531a62d9c58f949dc6ae6b54380734736ed95f7fd6e50cdb2b/56ed750f/kPfpQBcHNaAJ1xgYGWyBenuoNw36V0tpp8QHB_E15QCF3BEXrrNm8dj_UBvIJcHZkuTafj5l4-dQrfM-_eV-jw%3D%3D?uid=0&filename=2016-03-19%2014-45-31%20X%20.png&disposition=inline&hash=&limit=0&content_type=image%2Fpng&fsize=48443&hid=04a89a077f39eb74f01e9580e642295b&media_type=image&tknv=v2&etag=8cfaf74d5bfc556af778afe94e1b6a65]Image: kPfpQBcHNaAJ1xgYGWyBenuoNw36V0tpp8QHB_E15QCF3BEXrrNm8dj_UBvIJcHZkuTafj5l4-dQrfM-_eV-jw==[/url]
S>экспериментальным путем установлено, что пароль надо вводить очень медленно, чтобы все было хорошо.
S>НЕльзя ли как-то так сделать. чтобы ввод пароля отображался хотя бы звездочками, или как иначе решить проблему?[url=[img]]Image: [img][/url][/img]


А можно ли картинки как-то по-человечески вставить?
Или хотя бы дать короткие yadi.sk — ссылки на картинки?
Перекуём баги на фичи!
Re: как отображать звездочками пароль в bat-файле
От: Кодт Россия  
Дата: 27.03.16 17:03
Оценка:
Здравствуйте, sentiment, Вы писали:

S>Есть bat файл для быстрого подключения (и отключения) своего ya.disk`а на чужих компьютерах:


Спасибо за интересную идею. Запомню.

Что же касается ввода пароля, — придётся отдельно вводить пароль, отдельно просовывать его в net use
magic_prompt_password password "введите пароль к вашему диску"
net use x: https://webdav.yandex.ru /user:LOGIN %password%


где команда magic_prompt_password ENVVAR PROMPTTEXT — в зависимости от хотелок, может быть реализована просто или сложно.

Просто — это
set /p password="введите пароль к вашему диску: "

пароль будет виден на экране, в процессе ввода

Более заковыристо — это или прибегнуть к имеющимся на винде более мощным скриптовым средствам (WSH, PS), или тащить свой экзешничек, у которого в консольном интерфейсе реализован ввод пароля с показом звёздочек.

http://stackoverflow.com/questions/664957/can-i-mask-an-input-text-in-a-bat-file

@echo off

set login=YOUR_USER_NAME
set userprompt="ВВЕДИ ПАРОЛЬ К Я-ДИСКУ ДЛЯ ПОЛЬЗОВАТЕЛЯ %login%"

set subcommand=powershell "$p = Read-Host %userprompt% -AsSecureString; $p = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($p); $p=[Runtime.InteropServices.Marshal]::PtrToStringAuto($p); echo $p"

rem это такой способ направить выхлоп команды в переменную
set password=
for /f "usebackq delims=" %%p in (`%subcommand%`) do set password=%%p

rem подставляем логин-пароль в net use
net use x: https://webdav.yandex.ru /user:%login% %password%
Перекуём баги на фичи!
Re[2]: как отображать звездочками пароль в bat-файле
От: Кодт Россия  
Дата: 28.03.16 19:24
Оценка: 29 (3)
К>http://stackoverflow.com/questions/664957/can-i-mask-an-input-text-in-a-bat-file

Раскурил рецепт без пауэршелла. Это, конечно, магия ещё та!
:: использование: call :askpassword password "Vvedi parol, dorogoy drug! "
:: %1 - имя переменной
:: %2 - текст вопроса

:askpassword

:: символ CR
for /f "skip=1 delims= eol=" %%c in ('"echo(|replace foo . /u /w"') do set "CR=%%c"
:: символ BS
for /f %%c in ('"prompt $H & for %%_ in (_) do rem"') do set "BS=%%c"

:: выводим запрос (эквивалент echo -n)
echo(|set /p =%2

:: будем собирать строку из букв, пока что она пуста
set result=

:: цикл опроса клавиатуры
:run

:: слушаем один символ (включая BS и CR)
set c=
for /f "skip=1 delims= eol=" %%c in ('"replace foo . /u /w"') do set "c=%%c"

if "%c%"=="%bs%" goto backspace
if "%c%"=="%cr%" goto enter
goto char
:backspace
  if "%result%"=="" goto run
  :: откусываем последний символ из строки
  set result=%result:~0,-1%
  :: выводим забой-пробел-забой (затираем звёздочку)
  echo|set /p =%bs% %bs%
  goto run
:char
  :: дописываем символ в строку
  set result=%result%%c%
  :: выводим звёздочку
  echo |set /p =*
  goto run
:enter
  :: выводим пустую линию, т.е. переходим на следующую строку
  echo(
  :: и возвращаем результат из подпрограммы
  set %1=%result%
  exit /b


Магия номер раз
replace foo . /u /w переименовывает (несуществующий) файл foo, но перед этим делает паузу (да-да, ту самую pause), с той лишь разницей, что pause не выводит пользовательский ввод на экран, а replace — выводит.

Магия номер два
prompt $H & for %%_ in (_) do rem устанавливает промпт командной строки в виде одинокого забоя, а затем, как бы при echo ON, выполняет цикл единственный раз.
В стандартный вывод попадает строка, начинающаяся с забоя.

Магия номер три
echo( | set /p = ..... выводит пустую строку в конвеер, который слушает пользовательский ввод. Результат ввода нам не нужен. Главное, что на экран попадает ..... без завершающего перевода строки.

Магия номер четыре
set /f %%c in ('"commands go here"') do set var=%%c выполняет команды, направляя их результат в цикл, там его разбирают и выполняют последнее действие, в данном случае — присваивание.

Ну и микромагия — вместо rem писать :: для комментариев. Коммандком думает, что это метки такие, но кого это волнует.
Перекуём баги на фичи!
Re[3]: как отображать звездочками пароль в bat-файле
От: _NN_ www.nemerleweb.com
Дата: 04.04.16 09:51
Оценка:
Здравствуйте, Кодт, Вы писали:

echo(|set /p =%2


Скобки нужны тут ?
В чём отличие от
echo|set /p =%2
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: как отображать звездочками пароль в bat-файле
От: Кодт Россия  
Дата: 04.04.16 10:49
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, Кодт, Вы писали:


_NN>
_NN>echo(|set /p =%2
_NN>


_NN>Скобки нужны тут ?

_NN>В чём отличие от
_NN>
_NN>echo|set /p =%2
_NN>


Просто echo выдаст строку Режим вывода команд на экран (ECHO) включен. (или выключен, если было echo off)
В принципе, для "подавись чем попало" это тоже сойдёт.
Можно ещё написать set /p =%2 <nul

Чтобы вывести пустую строку, надо написать echo# (обязательно без пробела), где на месте # должен быть спецсимвол коммандкома: . ( \ +
Тогда коммандком думает, что строка параметров не пустая, но первый параметр пустой! Это такой хак.
Причём для разных команд допуски разные. dir или вызовы внешних экзешников по-разному трактуют всякий мусор в нулевом параметре.
Перекуём баги на фичи!
Re[5]: как отображать звездочками пароль в bat-файле
От: _NN_ www.nemerleweb.com
Дата: 05.04.16 06:54
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Просто echo выдаст строку Режим вывода команд на экран (ECHO) включен. (или выключен, если было echo off)

К>В принципе, для "подавись чем попало" это тоже сойдёт.
К>Можно ещё написать set /p =%2 <nul

У меня разницы в командной строке не заметно.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[6]: как отображать звездочками пароль в bat-файле
От: Кодт Россия  
Дата: 05.04.16 09:10
Оценка: 96 (1)
Здравствуйте, _NN_, Вы писали:

_NN>У меня разницы в командной строке не заметно.


Потому и незаметно. echo blablabla выдаёт что попало в stdout, он перенаправляется в set /p, set /p выводит текст (без перевода каретки) на экран и хавает мусор со своего входа, чтобы присвоить переменной (имя которой мы предусмотрительно не указали).
Главный эффект — это вывести текст без перевода каретки.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.