Предыстория: мне нужно программно найти различия между двумя файлами. Я хочу использовать WinMerge для создания отчета (Инструменты -> Создать отчет), который я могу проанализировать, чтобы получить различия между двумя файлами. Мне нужно, чтобы это было сделано с помощью сценария Groovy или сценария летучей мыши.
Я надеялся, что WinMerge предложит параметры командной строки для создания отчета, а затем я мог бы просто использовать Объект Groovy Process для выполнения WinMergeU.exe с аргументами. Судя по параметрам команды, которые я нашел для WinMerge, такого не везет.
Затем я надеялся, что смогу запустить WinMerge и отправлять нажатия клавиш для перехода по меню для создания отчета (Alt+T, R, Diff.html, [Enter]). Я не вижу способа сделать это из процесса Groovy и не нашел способа сделать это в сценарии летучей мыши. Я ищу что-то похожее на WshShell.Sendkeys в VB. Это погоня за дикими гусями?
ОБНОВЛЕНИЕ/Ответ с PowerShell в файле bat: меня заинтриговал комментарий Knuckle-Dragger об использовании сценария PowerShell в файле bat.
$folder = "C:\DevTools\WinMerge\WinMergeU.exe"
ii $folder
Start-Sleep -m 1000
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
[Microsoft.VisualBasic.Interaction]::AppActivate("WinMerge")
Start-Sleep -m 100
[void][System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
Start-Sleep -m 100
[System.Windows.Forms.SendKeys]::SendWait("%F")
[System.Windows.Forms.SendKeys]::SendWait("o")
[System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
[System.Windows.Forms.SendKeys]::SendWait("%T")
[System.Windows.Forms.SendKeys]::SendWait("r")
Start-Sleep -m 1000
[Microsoft.VisualBasic.Interaction]::AppActivate("Save As")
Start-Sleep -m 1000
[System.Windows.Forms.SendKeys]::SendWait("Diff.txt")
[System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
Чтобы инкапсулировать это в командном окне, сохраните его в файле PowerShellScript.ps1:
start /b /wait powershell.exe -nologo -WindowStyle Hidden -sta *PowerShellScript.ps1*
diff
, доступную практически в любой версии Unix. Будет намного проще выполнить эту задачу в Unix, используя другие инструменты, доступные в Unix. - person RaviH   schedule 21.01.2014