目前我可以使用 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"
Run Code Online (Sandbox Code Playgroud)
它引用的脚本如下。
load "%1" "%2"
expand all
folder-report layout:side-by-side options:display-mismatches output-to:"%3"
Run Code Online (Sandbox Code Playgroud)
感谢您提供任何意见。让它工作是我正在处理的更大的 Powershell 脚本的一部分。如果我可以让它从 Powershell 运行,它将为我节省大量时间,因为我将能够编写需要数小时的脚本。
与 in 不同cmd,未加引号@是PowerShell 中的元字符;也就是说,它有特殊的意义[1]。
要使用@ verbatim,为了bcompare.exe在这种情况下将其传递给,请使用`PowerShell 的转义字符对其进行转义;即,使用`@:
bcompare.exe `@"C:\script.txt" "C:\test1" "C:\test" "C:\bcreport\report.txt"
Run Code Online (Sandbox Code Playgroud)
另外,包括在@中带引号的字符串:
bcompare.exe "@C:\script.txt" "C:\test1" "C:\test" "C:\bcreport\report.txt"
Run Code Online (Sandbox Code Playgroud)
另一种选择是在参数之前放置--%所谓的停止解析符号,如Wasif Hasan 的回答所示;这样做可以防止 PowerShell 在传递参数之前解释它们。
但是,请注意,虽然如果您的所有参数都是文字,这会按预期工作,就像在您的情况下一样,但通常它会阻止您将PowerShell 变量和表达式用作参数中的 /,并且可能会产生其他意想不到的副作用- 请参阅此答案。
[1]
@在 PowerShell 中提供多种语法用途;跟在"之后@,PowerShell 认为参数是一个here-string;由于此处字符串需要多行定义,因此命令会因语法错误而中断。 @在变量名(例如,@foo)执行splatting 之前cmd的元字符与 PowerShell 的元字符进行对比。| 归档时间: |
|
| 查看次数: |
376 次 |
| 最近记录: |