批处理文件用*屏蔽输入而没有外部文件

时间:2014-04-08 16:06:17

标签: file batch-file input mask

我需要批处理文件来屏蔽输入*没有外部文件我需要快速写字母的代码

例如:

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

2 个答案:

答案 0 :(得分:2)

以下是在批处理文件中使用Powershell进行此操作的方法

@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%

Powershell默认安装在所有较新的操作系统上,因此它是一个很好的折衷方案。如果你必须支持XP机器,你可以使用VBScript做类似的事情。

答案 1 :(得分:1)

是的!纯批次有一种方法,误用xcopyprompt命令我们可以做到这一点

    @echo off
setlocal enabledelayedexpansion
call:show "Enter your passwordÿ" "0a"
call:hidePass
set /p password=<_tmp&del _tmp&echo/
echo/%password%
pause>nul
exit
:hidePass
    set "str="
    set "chars="
:writing
    set "key="
    for /F "usebackq delims=" %%L in (`xcopy /L /w "%~f0" "%~f0" 2^>NUL`) do (
        if not defined key set "key=%%L"
    )
    setlocal EnableDelayedExpansion
    set "key=!key:~-1!"
    if "%key%" == "" (echo/!str!>_tmp&exit/b)
    call:show "-" "0c"
    set "str=!str!!key!"
    goto :writing
:show
    for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
        set "DEL=%%a"
    )
    call :ColorText %~2 "%~1"
    exit/b
:ColorText
    <nul set /p ".=%DEL%" > "%~2"
    findstr /v /a:%1 /R "^$" "%~2" nul
    del "%~2" > nul 2>&1
    exit/b

唯一的问题是你不能使用*作为面具,在这种情况下我使用-