Как запустить этот скрипт Beyond Compare из Powershell? - PullRequest
3 голосов
/ 25 марта 2020

В настоящее время я могу использовать скрипт Beyond Compare для вывода результатов в файл. Вы все смогли помочь мне выяснить, как проверить различия в текстовом файле результатов с помощью Powershell. Однако у меня есть еще один вопрос. Чтобы получить результаты в текстовом файле, в Beyond Compare вы используете скрипт basi c, а затем запускаете скрипт через 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, это сэкономит мне массу времени, так как я смогу написать сценарий, который займет несколько часов.

Ответы [ 2 ]

4 голосов
/ 25 марта 2020

В отличие от cmd, @ без кавычек - это метасимвол в PowerShell; то есть он имеет особое значение [1] .

Для использования @ дословно , чтобы передать его bcompare.exe в этом случае экранируйте его с помощью `, который является escape-символом PowerShell; т. е. использовать `@:

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

Альтернатива - разместить --%, так называемый символ остановки разбора перед аргументами, как показано в ответ Васифа Хасана ; это не позволяет PowerShell интерпретировать аргументы перед их передачей.
Однако учтите, что, хотя все ваши аргументы работают как литералы , как в вашем случае, в целом, это предотвращает вы используете переменные PowerShell и выражения как / в аргументах и можете иметь другие неожиданные побочные эффекты - см. этот ответ .


[1]
* @ служит для нескольких целей syntacti c в PowerShell; с ", следующим за @, PowerShell считает, что аргументом является here-string ; так как здесь строка требует многострочного определения, команда прерывается из-за синтаксической ошибки.
* Этот ответ сравнивает метасимволы cmd с PowerShell.
* Этот ответ содержит подробный обзор того, как PowerShell анализирует аргументы команд без кавычек.

1 голос
/ 25 марта 2020

Или используйте --%, символ остановки парсинга , если вы используете powershell v3 +:

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

Или используйте показанное решение с помощью @ mklement0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...