批处理文件用*替换输入而没有外部文件

时间:2014-04-09 09:04:20

标签: file batch-file input replace

我需要批处理文件来掩盖输入*没有外部文件我需要代码((((快速写入字母)))))并且不用*

计算距离 <(>(((如果有代码从批处理文件中提取外部文件,使外部文件使用*生成密码,快速写入密码添加注释以查看代码))))

例如:

 @echo off
 set char=*
 set /p variable=Enter your password:
 set char=%variable%
 echo %char%
 pause

1 个答案:

答案 0 :(得分:2)

这是您在上一个问题中获得的代码的“清理”。如果这对你来说不够快,那么你应该考虑不批量使用并使用一些附加工具。

@echo off
    setlocal enableextensions disabledelayedexpansion

rem Call the subroutine to get the password    
    call :getPassword password 

rem Echo what the function returns
    if defined password (
        echo You have typed [%password%]
    ) else (
        echo You have typed nothing
    )

rem End of the process    
    endlocal
    exit /b


rem Subroutine to get the password
:getPassword returnVar
    setlocal enableextensions disabledelayedexpansion
    set "_password="

    rem We need a backspace to handle character removal
    for /f %%a in ('"prompt;$H&for %%b in (0) do rem"') do set "BS=%%a"

    rem Prompt the user 
    set /p "=password ?:" <nul 

:keyLoop
    rem retrieve a keypress
    set "key="
    for /f "delims=" %%a in ('xcopy /l /w "%~f0" "%~f0" 2^>nul') do if not defined key set "key=%%a"
    set "key=%key:~-1%"

    rem handle the keypress 
    rem     if No keypress (enter), then exit
    rem     if backspace, remove character from password and console
    rem     else add character to password and go ask for next one
    if defined key (
        if "%key%"=="%BS%" (
            if defined _password (
                set "_password=%_password:~0,-1%"
                setlocal enabledelayedexpansion & set /p "=!BS! !BS!"<nul & endlocal
            )
        ) else (
            set "_password=%_password%%key%"
            set /p "=*"<nul
        )
        goto :keyLoop
    )
    echo(
    rem return password to caller
    if defined _password ( set "exitCode=0" ) else ( set "exitCode=1" )
    endlocal & set "%~1=%_password%" & exit /b %exitCode%