Batch file 我可以在bat文件中屏蔽输入文本吗?

Batch file 我可以在bat文件中屏蔽输入文本吗?,batch-file,cmd,command-prompt,Batch File,Cmd,Command Prompt,我正在编写一个批处理文件来执行其他一些程序。在这种情况下,我需要提示输入密码。我有办法屏蔽输入文本吗?我不需要打印*******字符而不是输入字符。Linux的密码提示行为(键入时不打印)就足够了 @echo off SET /P variable=Password : echo %variable% Pause 这将读取输入,但我无法使用此方法屏蔽文本。我可能只会执行以下操作: .. echo Before you enter your password, make sure no-one

我正在编写一个批处理文件来执行其他一些程序。在这种情况下,我需要提示输入密码。我有办法屏蔽输入文本吗?我不需要打印*******字符而不是输入字符。Linux的密码提示行为(键入时不打印)就足够了

@echo off
SET /P variable=Password : 
echo %variable%
Pause

这将读取输入,但我无法使用此方法屏蔽文本。

我可能只会执行以下操作:

..
echo Before you enter your password, make sure no-one is looking!
set /P password=Password:  
cls
echo Thanks, got that.
.. 
因此,您会得到一个提示,然后屏幕在输入后清除


请注意,如果从命令提示符执行批处理文件,则输入的密码将存储在CMD历史记录中(谢谢)

如果这还不够好,我要么切换到python,要么编写一个可执行文件而不是脚本


我知道这些都不是完美的解决方案,但也许其中一个对您来说已经足够好了:)

到XP和Server 2003,您可以使用另一个附带的工具(VBScript)-以下两个脚本可以完成您想要的工作

首先,
getpwd.cmd

@echo off
<nul: set /p passwd=Password: 
for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i
echo.
getpwd.vbs
只是使用password对象从用户输入密码,然后将其打印到标准输出(下一段将解释为什么终端中没有显示)

getpwd.cmd
命令脚本有点复杂,但它基本上如下所示


“另一种选择的效果是我的EditV32(x86)或EditV64(x64)命令行工具。例如:

editv32 -m -p "Password: " PWD
-m表示“屏蔽输入”,而-p表示提示。用户的输入存储在PWD环境变量中。您可以在此处获得:


我在网上阅读了所有关于如何在批处理文件中屏蔽密码的笨拙解决方案,包括使用hide.com解决方案,甚至是使文本和背景颜色相同的解决方案。hide.com解决方案工作正常,不太安全,在64位Windows中也不起作用。因此,无论如何,使用100%的Microsoft实用程序,有办法

首先,让我解释一下我的用法。我有大约20台自动登录到Windows的工作站。它们在桌面上有一个快捷方式-到临床应用程序。机器被锁定,它们不能右键单击,它们只能访问桌面上的一个快捷方式。有时技术人员需要启动一些调试ap应用程序,浏览windows资源管理器并查看日志文件,而无需注销自动登录用户帐户

这就是我所做的

按照你的意愿去做,但是我把我的两个批处理文件放在了一个网络共享上,被锁定的计算机可以访问这个共享

我的解决方案利用了Windows-runas的1个主要组件。 在要创建的runas.bat的客户端上放置一个快捷方式。 仅供参考,在我的客户端上,为了更好地查看,我重命名了快捷方式,并更改了图标

您将需要创建两个批处理文件

我将批处理文件命名为runas.batDebug Support.bat

runas.bat包含以下代码:

cls
@echo off
TITLE CHECK CREDENTIALS 
goto menu

:menu
cls
echo.
echo           ....................................
echo            ~Written by Cajun Wonder 4/1/2010~
echo           ....................................
echo.
@set /p un=What is your domain username? 
if "%un%"=="PUT-YOUR-DOMAIN-USERNAME-HERE" goto debugsupport
if not "%un%"=="PUT-YOUR-DOMAIN-USERNAME-HERE" goto noaccess
echo.
:debugsupport
"%SYSTEMROOT%\system32\runas" /netonly /user:PUT-YOUR-DOMAIN-NAME-HERE\%un% "\\PUT-YOUR-NETWORK-SHARE-PATH-HERE\Debug Support.bat"
@echo ACCESS GRANTED! LAUNCHING THE DEBUG UTILITIES....
@ping -n 4 127.0.0.1 > NUL
goto quit
:noaccess
cls
@echo.
@echo.
@echo.
@echo.
@echo   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
@echo   \\                                   \\
@echo   \\    Insufficient privileges         \\  
@echo   \\                                    \\
@echo   \\      Call Cajun Wonder             \\
@echo   \\                                    \\
@echo   \\              At                    \\
@echo   \\                                    \\
@echo   \\        555-555-5555                \\
@echo   \\                                    \\
@echo   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
@ping -n 4 127.0.0.1 > NUL
goto quit
@pause
:quit
@exit
如果“%un%”,您可以为所有要授予访问权限的用户添加任意数量的;如果不是“%un%”,则可以添加任意数量的。 “@ping”是我的Coonas制作秒计时器的方法

这样就可以处理第一批文件了-很简单吧

以下是Debug Support.bat的代码:

cls
@echo off
TITLE SUPPORT UTILITIES
goto menu

:menu
cls
@echo %username%
echo.
echo           .....................................
echo            ~Written by Cajun Wonder 4/1/2010~
echo           .....................................
echo.
echo What do you want to do? 
echo.
echo [1]  Launch notepad
echo.

:choice
set /P C=[Option]? 
if "%C%"=="1" goto notepad
goto choice

:notepad
echo.
@echo starting notepad....
@ping -n 3 127.0.0.1 > NUL
start notepad
cls
goto menu
我不是一个程序员,大约一年前才开始使用批处理脚本,我发现在批处理文件中屏蔽密码的这种方法非常棒


我希望听到除我之外的其他人能够从中获得一些用处!

我使用了Blorgbeard的上述解决方案,这在我看来确实是非常好的。然后我对其进行了如下改进:

  • 谷歌搜索ansicon
  • 下载zip文件和示例文本文件
  • 安装(即将2个文件复制到system32)
  • 像这样使用它:

    @echo off
    ansicon -p
    set /p pwd=Password:ESC[0;37;47m
    echo ESC[0m
    
    这会将控制台切换为灰色或灰色,以便输入密码,并在完成后切换回。ESC实际上应该是一个不可打印的字符,您可以从下载的示例文本文件中复制它(在记事本中显示为左箭头)您可以使用示例文本文件查找所有颜色组合的代码


    如果您不是计算机管理员,您可能可以将文件安装在非系统目录中,然后在调用程序和使用转义序列之前,您必须将该目录附加到脚本中的路径。如果您需要一个只有几个文件的非管理员可分发包,则此目录甚至可能是当前目录文件。

    创建一个批处理文件,调用不可见字符所需的批处理文件,然后为正在调用的批处理文件创建一个快捷方式

    右击

    性质

    颜色

    文本==黑色

    背景==黑色

    申请


    因此,希望对您有所帮助!!!!!!!

    这可能是一个较老的主题,但如果您使用的是Windows Vista或7,我有一个解决方案可以很好地工作。我在这里制作了一个视频:


    批处理文件的粘贴bin是-我迟到了4年

    但我找到了一种方法,可以在一行中完成这项工作,而无需创建外部脚本;方法是从批处理文件中调用powershell命令

    多亏了TessellatingHeckler——没有输出到文本文件(我在一个变量中设置了powershell命令,因为它在for循环中的一个长行中非常混乱)

    最初我写它是为了输出到一个文本文件,然后从该文本文件中读取。但是上面的方法更好。在一行非常长、几乎不可理解的行中:

    @echo off
    powershell -Command $pword = read-host "Enter password" -AsSecureString ; $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > .tmp.txt & set /p password=<.tmp.txt & del .tmp.txt
    echo %password%
    

    解释powershell命令的作用;本质上,它使用
    读取主机-AsSecureString
    获取输入-以下两行将该安全字符串转换回纯文本,即输出(纯文本密码)然后使用
    .tmp.txt
    发送到文本文件。然后将该文件读入变量并删除。

    如果缺少源代码困扰您,我有一个
    editv32 -m -p "Password: " PWD
    
    cls
    @echo off
    TITLE CHECK CREDENTIALS 
    goto menu
    
    :menu
    cls
    echo.
    echo           ....................................
    echo            ~Written by Cajun Wonder 4/1/2010~
    echo           ....................................
    echo.
    @set /p un=What is your domain username? 
    if "%un%"=="PUT-YOUR-DOMAIN-USERNAME-HERE" goto debugsupport
    if not "%un%"=="PUT-YOUR-DOMAIN-USERNAME-HERE" goto noaccess
    echo.
    :debugsupport
    "%SYSTEMROOT%\system32\runas" /netonly /user:PUT-YOUR-DOMAIN-NAME-HERE\%un% "\\PUT-YOUR-NETWORK-SHARE-PATH-HERE\Debug Support.bat"
    @echo ACCESS GRANTED! LAUNCHING THE DEBUG UTILITIES....
    @ping -n 4 127.0.0.1 > NUL
    goto quit
    :noaccess
    cls
    @echo.
    @echo.
    @echo.
    @echo.
    @echo   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    @echo   \\                                   \\
    @echo   \\    Insufficient privileges         \\  
    @echo   \\                                    \\
    @echo   \\      Call Cajun Wonder             \\
    @echo   \\                                    \\
    @echo   \\              At                    \\
    @echo   \\                                    \\
    @echo   \\        555-555-5555                \\
    @echo   \\                                    \\
    @echo   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    @ping -n 4 127.0.0.1 > NUL
    goto quit
    @pause
    :quit
    @exit
    
    cls
    @echo off
    TITLE SUPPORT UTILITIES
    goto menu
    
    :menu
    cls
    @echo %username%
    echo.
    echo           .....................................
    echo            ~Written by Cajun Wonder 4/1/2010~
    echo           .....................................
    echo.
    echo What do you want to do? 
    echo.
    echo [1]  Launch notepad
    echo.
    
    :choice
    set /P C=[Option]? 
    if "%C%"=="1" goto notepad
    goto choice
    
    :notepad
    echo.
    @echo starting notepad....
    @ping -n 3 127.0.0.1 > NUL
    start notepad
    cls
    goto menu
    
    @echo off
    ansicon -p
    set /p pwd=Password:ESC[0;37;47m
    echo ESC[0m
    
    @echo off
    set "psCommand=powershell -Command "$pword = read-host 'Enter Password' -AsSecureString ; ^
        $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
            [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
    for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
    echo %password%
    
    @echo off
    powershell -Command $pword = read-host "Enter password" -AsSecureString ; $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > .tmp.txt & set /p password=<.tmp.txt & del .tmp.txt
    echo %password%
    
    @echo off
    powershell -Command $pword = read-host "Enter password" -AsSecureString ; ^
        $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; ^
            [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > .tmp.txt 
    set /p password=<.tmp.txt & del .tmp.txt
    echo %password%
    
    @echo off
    for /f "delims=" %%p in ('ReadLine -h -p "Enter password: "') do set PWD=%%p
    echo You entered: %PWD%
    
    :: Hidden.cmd
    ::Tom Lavedas, 02/05/2013, 02/20/2013
    ::Carlos, 02/22/2013
    ::https://groups.google.com/forum/#!topic/alt.msdos.batch.nt/f7mb_f99lYI
    
    
    @Echo Off
    :HInput
    SetLocal EnableExtensions EnableDelayedExpansion
    Set "FILE=%Temp%.\T"
    Set "FILE=.\T"
    Keys List >"%File%"
    Set /P "=Hidden text ending with Ctrl-C?: " <Nul
    Echo.
    Set "HInput="
    :HInput_
    For /F "tokens=1* delims=?" %%A In (
     '"Xcopy /P /L "%FILE%" "%FILE%" 2>Nul"'
    ) Do (
      Set "Text=%%B"
      If Defined Text (
        Set "Char=!Text:~1,1!"
        Set "Intro=1"
        For /F delims^=^ eol^= %%Z in ("!Char!") Do Set "Intro=0"
        Rem If press Intro
        If 1 Equ !Intro! Goto :HInput#
        Set "HInput=!HInput!!Char!"
      )
    )
    Goto :HInput_
    :HInput#
    Echo(!HInput!
    Goto :Eof 
    
    @Echo Off
    SetLocal EnableExtensions EnableDelayedExpansion
    
    Set /P "=Enter a Password:" < Nul
    Call :PasswordInput
    Echo(Your input was:!Line!
    
    Goto :Eof
    
    :PasswordInput
    ::Author: Carlos Montiers Aguilera
    ::Last updated: 20150401. Created: 20150401.
    ::Set in variable Line a input password
    For /F skip^=1^ delims^=^ eol^= %%# in (
    '"Echo(|Replace.exe "%~f0" . /U /W"') Do Set "CR=%%#"
    For /F %%# In (
    '"Prompt $H &For %%_ In (_) Do Rem"') Do Set "BS=%%#"
    Set "Line="
    :_PasswordInput_Kbd
    Set "CHR=" & For /F skip^=1^ delims^=^ eol^= %%# in (
    'Replace.exe "%~f0" . /U /W') Do Set "CHR=%%#"
    If !CHR!==!CR! Echo(&Goto :Eof
    If !CHR!==!BS! (If Defined Line (Set /P "=!BS! !BS!" <Nul
    Set "Line=!Line:~0,-1!"
    )
    ) Else (Set /P "=*" <Nul
    If !CHR!==! (Set "Line=!Line!^!"
    ) Else Set "Line=!Line!!CHR!"
    )
    Goto :_PasswordInput_Kbd
    
    <!-- :
    :: PasswordSubmitter.bat
    @echo off
    for /f "tokens=* delims=" %%p in ('mshta.exe "%~f0"') do (
        set "pass=%%p"
    )
    
    echo your password is %pass%
    exit /b
    -->
    
    <html>
    <head><title>Password submitter</title></head>
    <body>
    
        <script language='javascript' >
            window.resizeTo(300,150);
            function entperPressed(e){
                    if (e.keyCode == 13) {
                        pipePass();
                    }
            }
            function pipePass() {
                var pass=document.getElementById('pass').value;
                var fso= new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1);
                close(fso.Write(pass));
    
            }
        </script>
    
        <input type='password' name='pass' size='15' onkeypress="return entperPressed(event)" ></input>
        <hr>
        <button onclick='pipePass()'>Submit</button>
    
    </body>
    </html>
    
    @if (@X)==(@Y) @end /* JScript comment
    @echo off
    setlocal enableDelayedExpansion
    
    for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d  /o:-n "%SystemRoot%\Microsoft.NET\Framework\*jsc.exe"') do (
       set "jsc=%%v"
    )
    
    if not exist "%~n0.exe" (
        "%jsc%" /nologo /out:"%~n0.exe" "%~dpsfnx0"
    )
    
    for /f "tokens=* delims=" %%p in ('"%~n0.exe"') do (
        set "pass=%%p"
    )
    
    echo your password is !pass!
    
    endlocal & exit /b %errorlevel%
    
    */
    
    
    
    import System;
    
    
    
    var pwd = "";
    var key;
    
    Console.Error.Write("Enter password: ");
    
            do {
               key = Console.ReadKey(true);
    
               if ( (key.KeyChar.ToString().charCodeAt(0)) >= 20 && (key.KeyChar.ToString().charCodeAt(0) <= 126) ) {
                  pwd=pwd+(key.KeyChar.ToString());
                  Console.Error.Write("*");
               }
    
               if ( key.Key == ConsoleKey.Backspace && pwd.Length > 0 ) {
                   pwd=pwd.Remove(pwd.Length-1);
                   Console.Error.Write("\b \b");
               }
    
    
            } while (key.Key != ConsoleKey.Enter);
            Console.Error.WriteLine();
            Console.WriteLine(pwd);
    
    call :ReadFormattedLine password="********" /M "Enter password (8 chars): "
    
    @echo off
    setlocal
    
    set /P "=_" < NUL > "Enter password"
    findstr /A:1E /V "^$" "Enter password" NUL > CON
    del "Enter password"
    set /P "password="
    cls
    color 07
    echo The password read is: "%password%"
    
    @echo off
    if "%1"=="method%choice%" goto :method%choice%
    ::::::::::::::::::
    ::Your code here::
    ::::::::::::::::::
    cls
    echo :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    echo ::::                   Batch script to prompt for password!                 :::
    echo :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :choice
    echo.
    echo 1. First method
    echo.
    echo 2. Second method
    echo.
    echo 3. Third method
    echo.
    set/p choice=Choose a method: 
    if "%choice%" gtr "3" echo. & echo invalid option & echo. & pause & goto choice
    
    call :vars
        set options= %num%%smAlph%%cpAlph%
        set pwdLen=6
    
    if "%choice%" == "1" (
        set /p=Password: <nul 
        for /l %%i in (1,1,%pwdLen%) do call :password
    ) else (
        start /wait cmd /c call "%~f0" method%choice%
        )
    
    call :result%choice%
    
    
    ::just to see if it worked!
    echo.
    echo The Password you entered is: "%pwd%"&pause>nul
    
    ::::::::::::::::::
    ::More code here::
    ::::::::::::::::::
    exit /b
    
    
    
    
    
    :vars
    set num=1234567890
    set smAlph=abcdefghijklmnopqrstuvwxyz
    set cpAlph=ABCDEFGHIJKLMNOPQRSTUVWXYZ
        set pwd=
    goto :EOF
    
    
    :method2
    call :popUp
    setx result %pwd% >nul
    goto :EOF
    
    :method3
    call :popUp
        >> "%~f0" echo.
        >> "%~f0" echo :result%choice%
        >> "%~f0" echo set pwd=%pwd%
    goto :EOF
    
    :popUp
    title Password
    mode con lines=1 cols=30
    color 5a
    set /p=Password: <nul
    for /l %%i in (1,1,%pwdLen%) do call :password
    goto :EOF
    
    :password
    :: If you don't want case sensative remove "/cs" but remember to remove %cpAlph% from the %options%
    choice /c %options% /n /cs >nul
        call SET pwd=%pwd%%%options:~%errorlevel%,1%%
        set /p =*<nul
    GOTO :EOF
    
    
    :result2
    for /f "tokens=3" %%a in ('reg query hkcu\environment /v result') do set pwd=%%a
        setx result "" >nul
        reg delete hkcu\environment /v result /f >nul 2>&1
    :result1
    goto :EOF   
    ::You can delete from here whenever you want.
    
    @Echo Off  
      SetLocal EnableDelayedExpansion
      if "%1"==":HInput" goto :HInput
      set r=r%random%
      start /wait cmd /c call "%~f0" :HInput
    
    For /f "tokens=2,13 delims=, " %%a in (
        'tasklist /v /fo csv /fi "imagename eq cmd.exe"
        ^|findstr /v "Windows\\system32\\cmd.exe"
        ^|findstr "set /p=%r%"'
         ) do (
            set pid=%%a
            set Line=%%b
            set Line=!Line:%r%=!
            set Line=!Line:~,-2!
            )       
    taskkill /pid %pid:"=%>nul
      goto :HIEnd
    
    
      :HInput
      SetLocal DisableDelayedExpansion
      title Password
      mode con lines=2 cols=30
    
    Echo Enter your Code :
       Set "Line="
       For /F %%# In (
       '"Prompt;$H&For %%# in (1) Do Rem"'
       ) Do Set "BS=%%#"
    
      :HILoop
       Set "Key="
       For /F "delims=" %%# In (
       'Xcopy /W "%~f0" "%~f0" 2^>Nul'
       ) Do If Not Defined Key Set "Key=%%#"
       Set "Key=%Key:~-1%"
       SetLocal EnableDelayedExpansion
       If Not Defined Key start /min cmd /k mode con lines=1 cols=14 ^&set/p %r%!Line!=&exit
      If %BS%==^%Key% (Set /P "=%BS% %BS%" <Nul
       Set "Key="
       If Defined Line Set "Line=!Line:~0,-1!"
       ) Else Set /P "=*" <Nul
       If Not Defined Line (EndLocal &Set "Line=%Key%"
       ) Else For /F delims^=^ eol^= %%# In (
       "!Line!") Do EndLocal &Set "Line=%%#%Key%"
      Goto :HILoop
    
      :HIEnd
       Echo(
    Echo Your code is :  "!Line!"
       Pause
       Goto :Eof
    
    @echo off
    color 0f
    MODE CON COLS=132 LINES=50
    :start
    cls
    choice /C ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!?.# /N /CS /M Please enter your password to continue. (Valid characters include all letters, numbers, and ! ? .) Press # to submit: 
    SET ecode=%ERRORLEVEL%
    IF %ecode% EQU 66 goto submit
    IF %ecode% EQU 1 SET out=A
    IF %ecode% EQU 2 SET out=B
    IF %ecode% EQU 3 SET out=C
    IF %ecode% EQU 4 SET out=D
    IF %ecode% EQU 5 SET out=E
    IF %ecode% EQU 6 SET out=F
    IF %ecode% EQU 7 SET out=G
    IF %ecode% EQU 8 SET out=H
    IF %ecode% EQU 9 SET out=I
    IF %ecode% EQU 10 SET out=J
    IF %ecode% EQU 11 SET out=K
    IF %ecode% EQU 12 SET out=L
    IF %ecode% EQU 13 SET out=M
    IF %ecode% EQU 14 SET out=N
    IF %ecode% EQU 15 SET out=O
    IF %ecode% EQU 16 SET out=P
    IF %ecode% EQU 17 SET out=Q
    IF %ecode% EQU 18 SET out=R
    IF %ecode% EQU 19 SET out=S
    IF %ecode% EQU 20 SET out=T
    IF %ecode% EQU 21 SET out=U
    IF %ecode% EQU 22 SET out=V
    IF %ecode% EQU 23 SET out=W
    IF %ecode% EQU 24 SET out=X
    IF %ecode% EQU 25 SET out=Y
    IF %ecode% EQU 26 SET out=Z
    IF %ecode% EQU 27 SET out=a
    IF %ecode% EQU 28 SET out=b
    IF %ecode% EQU 29 SET out=c
    IF %ecode% EQU 30 SET out=d
    IF %ecode% EQU 31 SET out=e
    IF %ecode% EQU 32 SET out=f
    IF %ecode% EQU 33 SET out=g
    IF %ecode% EQU 34 SET out=h
    IF %ecode% EQU 35 SET out=i
    IF %ecode% EQU 36 SET out=j
    IF %ecode% EQU 37 SET out=k
    IF %ecode% EQU 38 SET out=l
    IF %ecode% EQU 39 SET out=m
    IF %ecode% EQU 40 SET out=n
    IF %ecode% EQU 41 SET out=o
    IF %ecode% EQU 42 SET out=p
    IF %ecode% EQU 43 SET out=q
    IF %ecode% EQU 44 SET out=r
    IF %ecode% EQU 45 SET out=s
    IF %ecode% EQU 46 SET out=t
    IF %ecode% EQU 47 SET out=u
    IF %ecode% EQU 48 SET out=v
    IF %ecode% EQU 49 SET out=w
    IF %ecode% EQU 50 SET out=x
    IF %ecode% EQU 51 SET out=y
    IF %ecode% EQU 52 SET out=z
    IF %ecode% EQU 53 SET out=0
    IF %ecode% EQU 54 SET out=1
    IF %ecode% EQU 55 SET out=2
    IF %ecode% EQU 56 SET out=3
    IF %ecode% EQU 57 SET out=4
    IF %ecode% EQU 58 SET out=5
    IF %ecode% EQU 59 SET out=6
    IF %ecode% EQU 60 SET out=7
    IF %ecode% EQU 61 SET out=8
    IF %ecode% EQU 62 SET out=9
    IF %ecode% EQU 63 SET out=!
    IF %ecode% EQU 64 SET out=?
    IF %ecode% EQU 65 SET out=.
    SET code=%out%
    SET show=*
    :loop
    cls
    choice /C ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!?.# /N /CS /M Please enter your password to continue. (Valid characters include all letters, numbers, and ! ? .) Press # to submit: %code%
    SET ecode=%ERRORLEVEL%
    IF %ecode% EQU 66 goto submit
    IF %ecode% EQU 1 SET out=A
    IF %ecode% EQU 2 SET out=B
    IF %ecode% EQU 3 SET out=C
    IF %ecode% EQU 4 SET out=D
    IF %ecode% EQU 5 SET out=E
    IF %ecode% EQU 6 SET out=F
    IF %ecode% EQU 7 SET out=G
    IF %ecode% EQU 8 SET out=H
    IF %ecode% EQU 9 SET out=I
    IF %ecode% EQU 10 SET out=J
    IF %ecode% EQU 11 SET out=K
    IF %ecode% EQU 12 SET out=L
    IF %ecode% EQU 13 SET out=M
    IF %ecode% EQU 14 SET out=N
    IF %ecode% EQU 15 SET out=O
    IF %ecode% EQU 16 SET out=P
    IF %ecode% EQU 17 SET out=Q
    IF %ecode% EQU 18 SET out=R
    IF %ecode% EQU 19 SET out=S
    IF %ecode% EQU 20 SET out=T
    IF %ecode% EQU 21 SET out=U
    IF %ecode% EQU 22 SET out=V
    IF %ecode% EQU 23 SET out=W
    IF %ecode% EQU 24 SET out=X
    IF %ecode% EQU 25 SET out=Y
    IF %ecode% EQU 26 SET out=Z
    IF %ecode% EQU 27 SET out=a
    IF %ecode% EQU 28 SET out=b
    IF %ecode% EQU 29 SET out=c
    IF %ecode% EQU 30 SET out=d
    IF %ecode% EQU 31 SET out=e
    IF %ecode% EQU 32 SET out=f
    IF %ecode% EQU 33 SET out=g
    IF %ecode% EQU 34 SET out=h
    IF %ecode% EQU 35 SET out=i
    IF %ecode% EQU 36 SET out=j
    IF %ecode% EQU 37 SET out=k
    IF %ecode% EQU 38 SET out=l
    IF %ecode% EQU 39 SET out=m
    IF %ecode% EQU 40 SET out=n
    IF %ecode% EQU 41 SET out=o
    IF %ecode% EQU 42 SET out=p
    IF %ecode% EQU 43 SET out=q
    IF %ecode% EQU 44 SET out=r
    IF %ecode% EQU 45 SET out=s
    IF %ecode% EQU 46 SET out=t
    IF %ecode% EQU 47 SET out=u
    IF %ecode% EQU 48 SET out=v
    IF %ecode% EQU 49 SET out=w
    IF %ecode% EQU 50 SET out=x
    IF %ecode% EQU 51 SET out=y
    IF %ecode% EQU 52 SET out=z
    IF %ecode% EQU 53 SET out=0
    IF %ecode% EQU 54 SET out=1
    IF %ecode% EQU 55 SET out=2
    IF %ecode% EQU 56 SET out=3
    IF %ecode% EQU 57 SET out=4
    IF %ecode% EQU 58 SET out=5
    IF %ecode% EQU 59 SET out=6
    IF %ecode% EQU 60 SET out=7
    IF %ecode% EQU 61 SET out=8
    IF %ecode% EQU 62 SET out=9
    IF %ecode% EQU 63 SET out=!
    IF %ecode% EQU 64 SET out=?
    IF %ecode% EQU 65 SET out=.
    SET code=%code%%out%
    SET show=%show%*
    goto loop
    :submit
    cls
    SET password=%code%
    IF %password% EQU 0cZrocks! SET result=1
    IF ELSE SET result=2
    IF %result% EQU 1 echo password correct
    IF %result% EQU 2 echo password incorrect
    timeout /T 2 /NOBREAK >nul
    cls
    IF %result% EQU 1 goto end
    IF ELSE goto start
    :end
    
    for /f "delims=" %%A in ('python -c "import getpass; print(getpass.getpass('Enter the CVS password: '));"') do @set CVSPASS=%%A
    echo PASS: %CVSPASS%
    
    Enter the CVS password:
    PASS: 123
    
    editenv -m -p "Password: " PWD
    
    :: see https://stackoverflow.com/questions/33293220/what-is-the-fastest-color-function-in-batch
    @echo off
    for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
    set color_white=%ESC%[37m
    set color_black=%ESC%[30m
    echo(
    set /p user=Username:
    set /p pass=password:%color_black%
    echo %color_white%
    echo blablablba
    
        set /p username="Enter School Username: "
        CMDKEY /list:SERVERNAME | FIND "NONE" > nul 2>&1
        IF %ERRORLEVEL% NEQ 0 GOTO MAPDRIVES
        CMDKEY /ADD:SERVERNAME /username:%username% /pass
        :MAPDRIVES
        NET USE Y: \\SERVERNAME\SHARE\%username%