2

我需要在 Windows 中为一个实用程序编写批处理文件。但是每次我从命令提示符运行时,该实用程序都会询问用户名和密码。我想在命令提示符中提示时传递用户名和密码。现在命令运行后,用户名和密码的问题出现了 qs 2 个单独的问题,例如: enter uname: enter pwd:

这成为一个问题,因为仅将 %1 和 %2 作为参数传递并没有帮助,因为 uname 和 pwd 是作为单独的 qs 来的。请帮我在windows中写一批……我对windows prog完全陌生……

4

4 回答 4

1

您是否检查过该实用程序:

  • 没有用于输入用户名/密码的任何命令行参数?
  • 没有其他输入用户名密码的机制,比如使用环境变量

我假设您检查了所有这些,除了手动输入用户名和密码之外别无选择。

在这种情况下,您应该看看AutoHotkey
它用于创建可以自动化 UI 输入的脚本,特别是运行需要键盘和鼠标控制的应用程序。

还有一个名为SendKeys.net的小实用程序用于批处理文件。
虽然没有测试过。

于 2013-03-31T09:30:34.690 回答
0

此任务可以通过 Windows 中的 VBS 完成。您可以使用 SendKeys() 来模拟键盘操作。它的工作方式类似于 Linux 中的命令“expect”。BAT 在这里帮不了你。

于 2013-03-31T14:08:31.017 回答
0

雷诺是对的,命令行参数将是最好的解决方案。查看您的实用程序手册或尝试实用程序.exe /?

以下解决方案可能有效(或可能无效)将您的答案写入文件(例如“credentials.txt”)(确保它仅包含两行)

myusername
mypassword

然后尝试

myutility < credentials.txt

出于安全原因,如果我编写了该实用程序,这将不起作用。

于 2013-03-31T10:19:39.170 回答
0

您可以调用此批处理-HTA-VBScript 混合文件(GUI 登录提示):

<!-- :

  :: LoginGUI.bat | Wasif Hasan | Sep 2020
  :: This is a Batch-HTA-VBScript hybrid that will show a GUI window to login
  :: Save it as a .bat file and run it in your other batch files
  :: and returns the username and password as a result (to STDOUT) (in "username;password" format)
  :: If you enter no password in the dialog it will show an error message box and persist 
  :: Arguments: "BatchFilePath" "prompt (To Show beside the password box)" BoolAllowBlankUsername BoolAllowBlankPassword
  :: Default prompt is "password"

  @echo off & setlocal EnableDelayedExpansion
  if "%*"=="" (
  for /f "tokens=* delims=" %%a in ('echo "Password:" False False ^| mshta.exe "%~f0"') do set "pass=%%a"
  ) else (
  for /f "tokens=* delims=" %%a in ('echo %* ^| mshta.exe "%~f0"') do set "pass=%%a"
  )
  echo !pass! & exit /b 0

-->

<!DOCTYPE html>
<html>
<head>
<title>Password box</title>
<hta:application
  applicationName="Password box"
  border="thin"
  maximizeButton="no"
  minimizeButton="no"
  showinTaskbar="no"
  scroll="no"
  singleInstance="yes"
  contextMenu="no"
  selection="no"
/>
<script type="text/vbscript">
  Sub Window_OnLoad()
    Dim fso2, strPrompt, dblQuote
    window.resizeTo 320,180
    Set fso2 = CreateObject("Scripting.FileSystemObject").GetStandardStream(0)
    strPrompt = fso2.ReadLine
    dblQuote = Chr(34)
    strPromptX = Split(strPrompt," ")
    strPrompt = strPromptX(0)
    strPrompt = Replace(strPrompt, dblQuote, "")
    Document.All.prompt.innerHTML = strPrompt
    document.All.username.Focus
  End Sub
  Sub Validate() 
    Dim fso, GetPassword, GetUsername
    GetPassword = Document.All.Password.Value
    GetUsername = Document.All.username.Value
    If GetPassword = "" Then 
      If Not allowBlankPassword = True Then
        MsgBox "Please enter a password!",48,"Password box"
      End If
    ElseIf GetUsername = "" Then
      If Not allowBlankUsername = True Then
        MsgBox "Please enter a username!",48,"Password box"
      End If 
    Else
      Set fso = CreateObject("Scripting.FileSystemObject").GetStandardStream(1)
      window.Close(fso.write(GetUsername & ";" & GetPassword))
    End If
  End Sub
</script>
</head>
<body style="background-color:lightblue;font-family:Tahoma;">
<div align="center">
<span id="username_l">Username:</span>
<input type="text" size="20" id="username" /><br /><br />
<span id="prompt">Password:</span>
<input type="password" size="20" id="Password" />
<p><input type="button" value="Login" onClick="Validate()" /></p>
</div>
</body>
</html>
于 2020-09-10T06:20:57.353 回答