我需要批处理文件来屏蔽输入*没有外部文件我需要快速写字母的代码
例如:
@echo off
set char=*
set /p variable=Enter your password:
set char=%variable%
echo %char%
pause
答案 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)
是的!纯批次有一种方法,误用xcopy
和prompt
命令我们可以做到这一点
@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
唯一的问题是你不能使用*作为面具,在这种情况下我使用-