【问题标题】:Batch parsing to VBscript批量解析为VBscript
【发布时间】:2012-08-01 11:42:51
【问题描述】:

我有一个从链接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 专家,非常欢迎解决这些问题的任何帮助!

【问题讨论】:

  • 您是否创建了一个表单,其中包含一个名为“strPw”的文本框和一个名为“Submit”的提交按钮?
  • 是的,我做到了。请参阅上面链接中的完整脚本。我没有修改 Vanderwoud 的脚本,只是在他的原始脚本顶部添加了上面的代码。编写 temp.txt 仍然有问题

标签: vbscript batch-processing batch-file


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 您好,Mark,我已阅读 MSDN 文章并按照您的建议编辑了 WSscript 和 Batch。我仍在使用未经修改的 Vanderwoude 的 Internet Explorer 脚本。我刚刚在他的脚本顶部添加了上面 WSscript 中描述的代码。还是行不通。在输入框中输入密码后,我的 temp.txt 文件没有创建。它说“Findstr 无法打开 temp.txt”。 “无效的密码”。批处理文件和 vbs 文件位于同一位置(c:\ 驱动器)。我是家里电脑的管理员。
  • 您使用的是哪个版本的 Windows?
  • 我会尝试通过消除脚本的 IE 部分来解决它。只需为strPw 分配一个值,然后将(大部分)其余代码从子程序中取出,以便它直接运行:strPw = "foo"Const ForWriting = 2Dim filesys, filetxt, FormContentSet filesys = CreateObject("Scripting.FileSystemObject")Set filetxt = filesys.OpenTextFile("c:\temp.txt", ForWriting, True)filetxt.WriteLine(strPw) filetxt.Close
  • 感谢马克的建议。我尝试了一种不同的方法,它现在正在工作。确实欢迎您的帮助!亲切的问候。
猜你喜欢
  • 2013-11-04
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2015-01-06
  • 1970-01-01
  • 2014-09-07
相关资源
最近更新 更多