【问题标题】:how to simulate user input in windows command prompt如何在 Windows 命令提示符下模拟用户输入
【发布时间】:2015-11-05 21:37:29
【问题描述】:

我需要在 windows 7+ 中使用 cmd(命令提示符)在某些句子中模拟用户输入,我在这里搜索并找到了一个很好的部分解决方案:

[部分解决方案] how to userinput without typing to a batch file

它在大多数情况下都有效,但由于某种原因,在其他情况下却失败了。例如,它适用于:

cmd /c echo y^> "%temp%\answer.tmp" ^& (chkdsk C: /F /R /X ^< "%temp%\answer.tmp") ^& del "%temp%\answer.tmp"

它创建一个名为“answer.tmp”的文件,其中包含两行,其中一行包含响应(在本例中为“y”),然后将其粘贴到“chkdsk C: /F /R /X”命令,最后删除它。

但是,由于某种原因,它失败了:

cmd /c echo y^> "%temp%\answer.tmp" ^& (dism /online /disable-feature /featurename:"TabletPCOC" ^< "%temp%\answer.tmp") ^& del "%temp%\answer.tmp"

唯一改变的是执行的命令,这次是“dism /online /disable-feature /featurename:'TabletPCOC'”。

你有什么想法吗?

【问题讨论】:

  • 当您在控制台窗口中以交互方式尝试此操作时会发生什么? (先运行echo y &gt; "%temp%\answer.tmp",然后运行dism /online /disable-feature /featurename:"TabletPCOC" &lt; "%temp%\answer.tmp"。)
  • 这个技巧只有在程序(“目标”)从 STDIN 获取输入时才有效。有些程序更喜欢直接从键盘获取输入(不确定dism 是否是其中之一,但请记住这一点)。

标签: batch-file command-line cmd command-prompt


【解决方案1】:

这是一个小的(不是真的...)PowerShell 程序,可以做你想做的事:

add-type -AssemblyName microsoft.VisualBasic

add-type -AssemblyName System.Windows.Forms

start cmd.exe 

start-sleep -Milliseconds 500

[Microsoft.VisualBasic.Interaction]::AppActivate("cmd.exe")

[System.Windows.Forms.SendKeys]::SendWait("bluh")

请注意,start Notepad.exe 是可选的,但如果它没有打开,这将不起作用。 start-sleep 命令会提供一个小计时器,这很有用,因为它让计算机有机会加载 Notepad.exe。

所以要在 cmd 中运行它:

powershell.exe add-type -AssemblyName microsoft.VisualBasic;add-type -AssemblyName System.Windows.Forms;start Notepad.exe;start-sleep -Milliseconds 500;[Microsoft.VisualBasic.Interaction]::AppActivate("Notepad");[System.Windows.Forms.SendKeys]::SendWait("bluh")

【讨论】:

  • 既然你想做dism /online /disable-feature /featurename:"TabletPCOC,你会用它而不是bluh。记住报价。
【解决方案2】:

感谢@RookieTEC9(我还不能评论你的回复)但它只在只有一个 cmd.exe 实例正在运行时才有效......

感谢@mklement0,当我直接执行它时,它正确地将“y”响应添加到文件中,但该命令仍然卡在用户响应提示符处。

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2015-01-31
    • 1970-01-01
    • 2017-06-20
    相关资源
    最近更新 更多