2015-11-05 54 views
0

我需要在Windows中使用CMD(命令提示符)7+,從來就搜查,並在這裏找到了一個很好的局部解決方案,以模擬在一些句子用戶輸入:如何模擬Windows用戶輸入命令提示符

[部分SOLUTION] 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" 

它創建兩條線,一個具有(在這種情況下「Y」)的響應名爲「answer.tmp」一個文件,然後pases爲「CHKDSKÇ :/ F/R/X「命令,最後刪除它。

但是,出於某種原因,它失敗與此:

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

唯一改變的是執行,這一次 「DISM /在線/禁用-功能/ featurename: 'TabletPCOC'」 的命令。

你有什麼想法嗎?

+0

當您在控制檯窗口中交互式地嘗試時會發生什麼? (運行'echo y>「%temp%\ answer.tmp」',然後運行'dism/online/disable-feature/featurename:「TabletPCOC」<「%temp%\ answer.tmp」'。) – mklement0

+0

只有在程序(「目標」)從STDIN輸入它時才起作用。一些程序喜歡直接從鍵盤輸入它們的輸入(不確定,如果'dism'是其中之一,但請牢記這一點)。 – Stephan

回答

0

這是一個小的(不是真的...)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是可選的,但是這個不一樣,如果它不是開放的工作。啓動睡眠命令會給出一個小計時器,這很有用,因爲它使計算機有機會加載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")

+0

既然你想做'dism/online/disable-feature/featurename:「TabletPCOC',你可以用這個來代替bluh。REMEBER引用。 – RookieTEC9

0

感謝@ RookieTEC9(我不能評論你的回答還沒有),但它僅適用,如果只有一個cmd.exe的實例在運行...

感謝@ mklement0,當我直接執行它時,它正確地將「y」響應添加到文件,但該命令仍然卡住在用戶響應提示符處。

相關問題