【问题标题】:Batch file redirection批处理文件重定向
【发布时间】:2009-04-15 12:34:21
【问题描述】:

我有一个调用我的 IDE 的批处理文件,所以我只想知道我们是否可以将我的 IDE 中存在的内容(全部内容)提取到一些文本文件中。

我的批处理文件写在下面

D:\WindRiver\wrenv.exe -p vxworks653-2.2.3 run
PAUSE

是否需要向我现有的批处理文件添加更多代码?

【问题讨论】:

    标签: windows batch-file dos


    【解决方案1】:

    我不确定您对“提取我的 IDE 中的内容”有何看法,但一般来说,这类问题可以使用自动化工具解决。此类工具可以从窗口名称、按钮标题、文本内容中获取 Windows 环境中的任何内容……您可能需要从 3thd 方应用程序中获取的所有内容(甚至是 gui 元素的图片)

    我建议你看看AutoHotKey,大约 200KB 的 Windows 自动化脚本语言。

    一般来说,您不能批量执行此操作。

    在 AutoHotKey 中获取窗口的内容可以很简单:

     WinGetText, text, "name of the window"
     FileAppend, %text%, c:\out.txt
    

    它可能会变得更复杂一些,但是您可能想要的任何东西都不会涉及超过 10 行的 AHK 脚本。

    这是最好的方法,因为它不依赖于给定程序的特性,所以一旦你学习了AHK,你可以以统一的方式从系统中获取任何信息。

    请记住,某些应用程序使用非标准 Windows 组件,并且它们可能无法自动化(但这很少见)。

    在社区论坛上有很多有用的函数和库,基本上你可能需要任何东西来获取信息 - 将标准输入 / 输出重定向到你的文件,COM Accesibilty 模块(在 Windows 中自动化的系统方法),甚至一些 ocr 包装器来扫描图像上的信息。

    【讨论】:

    • 嗨,我的意思是我的 IDE 中存在的所有信息都应该登录到某个文本文件中
    • 嘿,这会让我的批处理文件处理变得混乱吗?你提到了哪个社区论坛??
    • 自动热键论坛。不,它不会搞砸的。您不会有任何批处理文件:P 只需 1 个简短的 AHK 脚本。
    • 嗨,我真的需要我的批处理文件(.bat),因为它非常需要启动我的 IDe 才能工作。所以无论如何都可以将它与我的 .bat 文件集成。
    • 嗨,我用 AutoHotKey 试过了。下面显示我的 test.ahk 运行,“D:\WindRiver\wrenv.exe”-p vxworks653-2.2.3 运行 WinWaitActive,D:\WindRiver\ wrev.exe, , 2 WinGetText, text, "D:\WindRiver\wrev.exe" FileAppend, %text%, C:\ThreePartition\ACTUAL.txt 我无法提取输出。
    【解决方案2】:

    抱歉,回复晚了。这是实际的 IDE(D:\WindRiver\wrev.exe -p vxworks653-2.2.3),当我将它放在命令提示符中时,我的 IDE 被调用。请回复我更多澄清

    谢谢 史蒂芬

    【讨论】:

    • 该命令告诉我的只是您正在使用的可执行文件。我不认识那个可执行文件名,所以我仍然不确定你要启动什么。是 Wind River Workbench:is.gd/sIda ...还是别的什么?
    • 其实就是“VXWorks 653 2.2.3开发Shell”。
    【解决方案3】:

    >>> 嗨,我刚刚尝试使用 AutoHotKey....

    不,不正确。

    只有在我安装了我没有的 WindRiver 时才能生成正确的代码。 好的,让我简单解释一下。

    首先假设 IDE 的标题以“WindRiver”字样开头。 WindRiver 必须在其控件层次结构中的某些标准窗口控件中保存文本。有问题的控件类型指导您如何从中获取文本。例如,如果是 ListView 或 ListBox,则必须使用

    ControlGet, outputVar, List,, SysListView321, WindRiver
    

    上面的代码意思是,“从标题以'WindRiver'开始的应用程序中获取第一个SysListView32控件的文本(因此末尾为1),并将其放入ouputVar变量中”

    如果它保留在编辑框中,您可以这样做:

    ControlGetText, OutputVar, Edit1, WindRiver
    

    这意味着“在应用程序中获取标题为 WindRiver 的第一个编辑控件的内容”

    要获得相关控件的类型和数量,只需打开 Window Spy(右键单击 AHK 托盘图标)并将鼠标悬停在控件上即可查看其详细信息。

    整个脚本如下所示:

    Run, d:\WIndriver ....
    WinWaitActive, WindRiver
    ControlGetText, OutputVar, Edit1, WindRiver
    MsgBox %OtputVar%  
    

    如果窗口的标题不断变化,您将不得不使用窗口类 instad title 来识别窗口。例如,您可以将记事本定位为

    ControlGetText, o, Edit1, Untitled 
    

    COntrolGetText, o, Edit1, ahk_class Notepad
    

    第一种方法使用窗口标题,第二种方法使用应用程序的 Window API 类,因为标题可以更改。

    总而言之,要熟悉 AHK,请查看启动示例。我可以向你保证,经过几天的练习,你会发现自己可以根据需要调整任何应用程序。

    要了解 AHK 的强大功能以及可以在其中完成哪些惊人的事情,请查看 Dock 模块。

    您无法批量执行此操作并使用 std 重定向,因此您最好习惯 AHK 或一些类似的自动化语言(AutoIt、Phantom、WinRunner....)。顺便说一句,这种问题通常会在 AHK 社区寻求帮助论坛上得到答复。

    【讨论】:

    • 非常感谢 majkinetor 为您提供的答案付出了这么多努力。它现在工作得很好。再次非常感谢。
    【解决方案4】:

    我问a similar question 哪个可能有用。只有当您的 IDE 将信息输出到 stdout/stderr 等时,这种方法才可能起作用。

    我已经取得了一些(有限的)成功,连接到已经运行的进程以尝试拦截它们正在输出的数据。

    具体来说,您要捕捉的是什么?它的一个窗口的输出?启动失败的错误信息?

    [编辑] 我仍然不确定您要捕获的确切内容,但听起来您可以从批处理文件中启动 Python 脚本。 The script launches your IDE 并捕获 stdout 和 stderr 这将为您提供正常输出任何错误。

    【讨论】:

    • 嗨,乔恩,我真正想要的是将我的 IDE 的全部内容放入 som 文本文件中。除了在 IDE 中,我无法生成任何显示我的 IDE 执行结果的日志文件窗口本身。我希望将全部内容登录到一些 xml 文件或文本文件中,以便我可以使用它
    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 2021-06-03
    • 2020-12-20
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    相关资源
    最近更新 更多