HTML的input type="password"对应的Windows批处理代码是什么?

10 浏览
0 Comments

HTML的input type="password"对应的Windows批处理代码是什么?

我需要在Windows脚本中从用户那里获取身份验证凭据,但经典的“第一个谷歌搜索结果”方法不太令人满意,所以我想知道是否有类似于HTML的的“等效”方法?非常感谢您提前的任何评论!

0
0 Comments

在Windows中,HTML的等效的Windows批处理命令是什么?

问题的出现原因:在Windows中,没有直接的批处理命令可以实现类似HTML的的密码输入功能。因此,需要使用其他方法来实现这个功能。

解决方法:通过使用在Windows上免费提供的另一个工具,可以实现密码输入功能。以下是两个脚本的示例:

首先,GetPwd.cmd:

@echo off

:: GetPwd.cmd - 获取密码,不回显。

for /f "delims=" %%i in ('cscript /nologo GetPwd.vbs') do set passwd=%%i

echo.

:: 这部分只是为了证明我们已经获取了密码。

echo %passwd%

然后,GetPwd.vbs:

' GetPwd.vbs - 获取密码,不回显,并输出。
Set oScriptPW = CreateObject("ScriptPW.Password")
strPassword = oScriptPW.GetPassword()
Wscript.StdOut.WriteLine strPassword

GetPwd.vbs脚本使用密码对象从用户输入密码,并将其打印到标准输出(下一段将解释为什么不会显示在终端上)。

GetPwd.cmd脚本稍微复杂一些(但通常命令脚本都是如此)。

"

这个命令只是输出提示,没有尾随的CR/LF - 这是模仿bash的"echo -n"的一种巧妙方式。它将passwd设置为空字符串作为副作用,并且不等待输入,因为它的输入来自nul:设备。

"for /f "delims=" %%i in ('cscript /nologo GetPwd.vbs') do set passwd=%%i"

这个语句是最棘手的部分。它以无Microsoft广告的方式运行vbscript(/nologo),所以唯一的输出行是密码(来自vbscript的"Wscript.StdOut.WriteLine strPassword")。

将分隔符设置为空是为了捕获带有空格的输入行,否则只会得到第一个单词。"for ... do set ..."将passwd设置为vbscript输出的实际密码。

然后我们输出一个空行(实际上是结束"Password: "行),并输出密码以验证它是否起作用:

C:\Pax> GetPwd

Password:

this is my password

C:\Pax>

这个脚本pw.dll在XP和2K3中可用,但不一定适用于以后的版本。

以下是Vista和可能的Win7的说明,请尝试一下:

为了隐藏密码,该脚本利用了ScriptPW COM对象。ScriptPW在Windows XP和Windows 2003上默认加载。如果您正在运行Windows 2000或Windows Vista,您需要从XP系统或Windows 2003系统的Windows\System32文件夹中复制scriptpw.dll文件到您的Windows 2000或Vista系统的Winnt\System32或Windows\System32文件夹。复制DLL后,您需要通过运行以下命令来注册它:

regsvr32 scriptpw.dll

要在Vista机器上成功注册DLL,您需要以管理员身份打开命令提示符。要做到这一点,点击开始|所有程序|附件。然后右键单击命令提示符快捷方式,选择“以管理员身份运行”。进入以管理员身份的命令提示符后,您将能够成功运行regsvr32 scriptpw.dll命令来注册DLL。

文章整理完毕。

0
0 Comments

在Windows批处理中,如果想要实现类似HTML中的input type="password"的效果,可以使用以下方法:

首先,可以创建一个Visual Basic Script(VBS)来处理密码输入。以下是一个示例的批处理代码:

@echo off & setlocal enableextensions

:: 构建一个Visual Basic Script

set vbs_=%temp%\tmp$$$.vbs

set skip=

findstr "'%skip%VBS" "%~f0" > "%vbs_%"

::

:: 不换行提示,与第15条类似

echo.|set /p="Password: "

:: 使用Microsoft Windows Script Host Version 5.6运行脚本

for /f "tokens=* delims=" %%a in ('cscript //nologo "%vbs_%"') do set MyPass1=%%a

::

::echo.

echo.|set /p="Retype : "

for /f "tokens=* delims=" %%a in ('cscript //nologo "%vbs_%"') do set MyPass2=%%a

::

:: 清理

for %%f in ("%vbs_%") do if exist %%f del %%f

::

:: 显示结果

echo.

if "%MyPass1%"=="%MyPass2%" (

echo The entered password was %MyPass1%

) else (

echo No match)

endlocal & goto :EOF

'

'The Visual Basic Script

Set WshPass = WScript.CreateObject("ScriptPW.Password") 'VBS

Password=WshPass.GetPassWord() 'VBS

WScript.Echo PassWord 'VBS

上述代码通过调用Visual Basic Script(VBS)来实现密码输入。用户输入密码时,将不会显示在屏幕上。最后,将比较两次输入的密码,并输出结果。

然而,由于"ScriptPW.Password"对象在Windows Vista、Windows 7和Windows Server 2008中不被支持,因此可以使用一个小的C#控制台应用程序来替代。可以在以下链接中找到相关的C#代码:http://blog.magerquark.de/scriptpw-dll-on-windows-2008-and-windows-7-scriptpw-password/

以上就是在Windows批处理中实现类似HTML中input type="password"的方法。

0
0 Comments

1. 问题出现的原因是HTML中的标签在Windows批处理中没有直接的等效方法。

解决方法是使用纯批处理解决方案或使用HTA弹出窗口的密码提交器。

在纯批处理解决方案中,可以使用XCOPY命令和其/P /L开关来模拟隐藏的密码输入。具体代码如下:

:: 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

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

在使用HTA弹出窗口的密码提交器中,需要保存为.bat文件,代码如下:

Password submitter


另外,还可以使用编译的.NET混合解决方案。这个解决方案需要保存为.bat文件,它会创建/编译一个小的.exe文件,然后调用它来获取密码。代码如下:

()==() /* JScript comment

off

setlocal

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("*");

}

} while (key.Key != ConsoleKey.Enter);

Console.Error.WriteLine();

Console.WriteLine(pwd);

以上就是解决Windows批处理中输入类型为password的等效方法的几种解决方案。

0