【问题标题】:How to run this Beyond Compare script from Powershell?如何从 Powershell 运行此 Beyond Compare 脚本?
【发布时间】:2021-05-08 02:14:02
【问题描述】:

目前我可以使用 Beyond Compare 脚本将结果输出到文件。你们都能够帮助我弄清楚如何通过 Powershell 检查结果文本文件中的差异。不过,我还有另一个问题。要将结果放入文本文件,Beyond Compare 让您使用基本脚本,然后通过 cmd 运行脚本。我的问题是如何通过 Powershell 而不是 cmd 运行脚本?以下是 cmd 中用于运行脚本的命令。

c:\Program Files\Beyond Compare 4>bcompare.exe @"C:\script.txt" "C:\test1" "C:\test" "C:\bcreport\report.txt"

它引用的脚本如下。

load "%1" "%2"
expand all
folder-report layout:side-by-side options:display-mismatches output-to:"%3"

感谢您的任何意见。让它工作是我正在处理的一个更大的 Powershell 脚本的一部分。如果我可以从 Powershell 运行它,它将为我节省大量时间,因为我将能够编写需要数小时的脚本。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    cmd 不同,未引用的@ 是PowerShell 中的元字符;也就是说,它具有特殊含义[1]

    要使用@ 逐字逐句,为了在这种情况下将其传递给bcompare.exe,请使用` 对其进行转义,这是PowerShell 的转义字符;即,使用`@

    bcompare.exe `@"C:\script.txt" "C:\test1" "C:\test" "C:\bcreport\report.txt"
    

    或者包括@引用的字符串

    bcompare.exe "@C:\script.txt" "C:\test1" "C:\test" "C:\bcreport\report.txt"
    

    另一种选择是在参数前放置--%,即所谓的停止解析符号,如Wasif Hasan's answer所示;这样做可以防止 PowerShell 在传递参数之前对其进行解释。
    但是,请注意,虽然如果您的所有参数都是 文字,这会按预期工作,但在您的情况下,通常它会阻止您使用 PowerShell 变量表达式作为 / 在参数中,并且可能有其他意外的副作用 - 请参阅 this answer


    [1]

    • @ 在 PowerShell 中用于多种语法目的;在@ 后面加上",PowerShell 认为参数是here-string;由于 here-string 需要多行定义,因此该命令会因语法错误而中断。 @变量 名称(例如,@foo)之前执行 splatting
    • This answercmd 的元字符与 PowerShell 的元字符进行对比。
    • This answer 全面概述了 PowerShell 如何解析不带引号的命令参数。

    【讨论】:

      【解决方案2】:

      如果您使用的是 powershell v3+,请使用 --%stop-parsing symbol

      bcompare.exe --% @"C:\script.txt" "C:\test1" "C:\test" "C:\bcreport\report.txt"
      

      或使用@mklement0 显示的解决方案

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多