Есть bat файл для быстрого подключения (и отключения) своего ya.disk`а на чужих компьютерах:
---------
net use X: https://webdav.yandex.ru /User:LOGIN
start X:
pause 0
net use x: /delete /y
---------
после ввода логина требуется вводить пароль, причем ввод пароля никак не отображается.
но в большинстве случаев, после ввода пароля выскакивает "ошибка 5".
экспериментальным путем установлено, что пароль надо вводить очень медленно, чтобы все было хорошо.
НЕльзя ли как-то так сделать. чтобы ввод пароля отображался хотя бы звездочками, или как иначе решить проблему?[/img]
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 — ссылки на картинки?
Здравствуйте, 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), или тащить свой экзешничек, у которого в консольном интерфейсе реализован ввод пароля с показом звёздочек.
@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-файле
Раскурил рецепт без пауэршелла. Это, конечно, магия ещё та!
:: использование: 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_, Вы писали:
_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-файле
Здравствуйте, Кодт, Вы писали:
К>Просто echo выдаст строку Режим вывода команд на экран (ECHO) включен. (или выключен, если было echo off) К>В принципе, для "подавись чем попало" это тоже сойдёт. К>Можно ещё написать set /p =%2 <nul
Здравствуйте, _NN_, Вы писали:
_NN>У меня разницы в командной строке не заметно.
Потому и незаметно. echo blablabla выдаёт что попало в stdout, он перенаправляется в set /p, set /p выводит текст (без перевода каретки) на экран и хавает мусор со своего входа, чтобы присвоить переменной (имя которой мы предусмотрительно не указали).
Главный эффект — это вывести текст без перевода каретки.