1

我有一个从链接http://www.robvanderwoude.com/vbstech_ui_password.php复制的 VBScript

在现有的 VBSscript 中,我添加了“Internet Explorer 版本”的代码:

WS SCRIPT - 命名为 Password.vbs(请参阅上面链接中的完整脚本

strPw = GetPassword( "Please, type your password:" ) 

Sub Submit_OnClick
Const ForWriting = 2
Dim filesys, filetxt, FormContent
Set FormContent = document.getElementById("strPw")
Set filesys = CreateObject("Scripting.FileSystemObject")
Set filetxt = filesys.OpenTextFile("c:\temp.txt", ForWriting, True)
filetxt.WriteLine(FormContent.value) 
filetxt.Close
End Sub   

批处理脚本

@echo off 

SET VALIDPASSWORD=1234

wscript Password.vbs

findstr %VALIDPASSWORD% c:\temp.txt
if ERRORLEVEL 1 (
     echo Incorrect password.
     goto :EOF
 ) else (
     echo Password correct. 
)

echo Batch continues from here
pause

:EOF
exit /b

文件 temp.TXT 应与用户在输入框中键入的信息一起发送到 c:\。该批次将读取此输入并与设置的密码进行比较并继续编码...

我怎样才能使这项工作?temp.TXT 没有生成等等...

BATCH 和 VBS 专家,非常欢迎任何帮助解决这些问题!

4

1 回答 1

2

如果C:\temp.txt没有被创建,那么第一个问题不在于批处理文件。

您链接到的文章的作者提到此代码不适用于 Win7。我没有方便测试的非 Win7 机器,但我怀疑 IE 是否有权写入 C: 驱动器的根目录(他的代码不这样做)。另一种可能性是Password.vbs与批处理文件所在的路径不同。但是,如果是这种情况,您会收到一条错误消息。

既然这无论如何都会从命令行运行,为什么不尝试修改他发布的更简单的 WScript 版本呢?假设这是由非管理员运行的,并且根据运行的操作系统,您将需要使用用户有权写入的目录(例如,%TEMP%\temp.txt.)。

话虽如此,您还会遇到更多问题。一方面,您的OpenTextFile通话使用ForAppending模式(那里是“8”)。这意味着您的 temp.txt 文件将保存用户曾经输入的所有答案。这也意味着当你做你的时,如果findstr有人输入了正确的密码,检查就会成功。使用起来会更好,所以每次都是新生成的。有关详细信息,请参阅此 MSDN 文章ForWriting

此方法不是处理密码的安全方法。一方面,用户可以只读取您存储有效密码的批处理文件的内容,或者更简单的是,如果他们确实获得了正确的密码,他们可以看到应该发生的事情。但是,如果您必须这样做,我建议您将批处理文件更改为以下内容:

@echo off
REM This file assumes that you switch to a wscript version 
REM and use the recommendations I gave.

SET VALIDPASSWORD=IAmTheRightPassword

wscript Password.vbs
findstr %VALIDPASSWORD% %TEMP%\temp.txt
if ERRORLEVEL 1 (
    echo Incorrect password.
    goto :EOF
) else (
    echo Password correct.
)
REM Here's where you put whatever you were going to do if 
REM the password was correctly entered.
于 2012-08-03T15:49:39.067 回答