Могу ли я получить && для работы в Powershell?
&&
, как известно, трудно найти в google, но лучшее, что я нашел, это эта статья, в которой говорится, что используйте -and
.
К сожалению, он больше не дает никакой информации, и я не могу узнать, что я должен делать с -and
(опять же, как это ни странно трудно найти)
Контекст, в котором я пытаюсь использовать его, - "выполнить cmd1, и в случае успеха выполнить cmd2", в основном это:
csc /t:exe /out:a.exe SomeFile.cs && a.exe
Это должно быть легко несколько рецензий на кого-то, кто знает, спасибо!
Изменить: если вы просто хотите запускать несколько команд в одной строке, и вам все равно, если первый из них терпит неудачу или нет, вы можете использовать ;
Для большинства моих целей это прекрасно.
Например: kill -n myapp; ./myapp.exe
.
Ответы
Ответ 1
2019: команда Powershell рассматривает возможность добавления поддержки &&
в Powershell - оцените этот GitHub PR
В CMD '& & amp;' означает "выполнить команду 1, и, если она выполнена успешно, выполнить команду 2". Я использовал его для таких вещей, как:
build && run_tests
В PowerShell самое близкое, что вы можете сделать, это:
(build) -and (run_tests)
У него та же логика, но текст вывода команд потерян. Может быть, это достаточно хорошо для вас.
EDIT
Если вы делаете это в сценарии, вам, вероятно, будет лучше разделить операторы, например:
build
if ($?) {
run_tests
}
Ответ 2
& & и || были в списке вещей для реализации (до сих пор), но не появились в качестве следующей наиболее полезной вещи для добавления. Причина в том, что мы имеем -AND и -OR.
Если вы считаете, что это важно, напишите предложение Connect, и мы рассмотрим его для V3.
Ответ 3
Попробуйте следующее:
$errorActionPreference='Stop'; csc /t:exe /out:a.exe SomeFile.cs; a.exe
Ответ 4
Я пробовал эту последовательность команд в PowerShell:
Тест Fisrt
PS C:\> $MyVar = "C:\MyTxt.txt"
PS C:\> ($MyVar -ne $null) -and (Get-Content $MyVar)
True
($MyVar -ne $null)
вернулся true и (Get-Content $MyVar)
также вернул true.
Второй тест
PS C:\> $MyVar = $null
PS C:\> ($MyVar -ne $null) -and (Get-Content $MyVar)
False
($MyVar -ne $null)
возвращает false, и до сих пор я должен предположить, что (Get-Content $MyVar)
также возвратил false.
Третий тест показал, что второе условие даже не анализировалось.
PS C:\> ($MyVar -ne $null) -and (Get-Content "C:\MyTxt.txt")
False
($MyVar -ne $null)
вернулся false и доказал, что второе условие (Get-Content "C:\MyTxt.txt")
никогда не запускалось, возвращая false для всей команды.
Ответ 5
Если ваша команда доступна в cmd.exe (что-то вроде python./script.py
но не команда PowerShell, например ii.
(Это означает, что открыть текущий каталог с помощью проводника)), вы можете запустить cmd.exe в PowerShell. Синтаксис такой:
cmd /c "command1 && command2"
Здесь &&
обеспечивается синтаксисом cmd, описанным в этом вопросе.
Ответ 6
Я думаю, что простая инструкция if может это сделать. Как только я увидела ответ mkelement0 выше того, что последний статус выхода сохраняется в $?, я добавил следующее:
# Set 1st command to variable
$a=somecommand
# Temp var to store exit status of last command (since we can't write to $?)
$test=$?
# Run Test
if ($test=$true) { 2nd-command }
Итак, для примера op это будет:
a=(csc /t:exe /out:a.exe SomeFile.cs); $test = $?; if ($test=$true) { a.exe }
Ответ 7
Обычно в Linux я делаю что-то вроде: ruby -c learn.rb && foodcritic learn.rb
Однако на Windows PS не могу этого сделать! В итоге я сделал файл .ps1
с этим:
Param(
[string]$fileName
)
ruby -c $fileName
foodcritic $fileName
и назвал это bamemeril.ps1
PS C:\Users\riotc> .\bamemeril.ps1 learn.rb
Syntax OK
Checking 1 files
x
FC011: Missing README in markdown format: ../README.md:1
FC031: Cookbook without metadata.rb file: ../metadata.rb:1
FC071: Missing LICENSE file: ../LICENSE:1
PS C:\Users\riotc>
Ответ 8
Подробным эквивалентом является объединение $LASTEXITCODE
и -eq 0
:
msbuild.exe args; if ($LASTEXITCODE -eq 0) { echo 'it built'; } else { echo 'it failed'; }
Я не уверен, почему, if ($?)
Не сработало для меня, но этот сработал.
Ответ 9
Очень старый вопрос, но для новичков: возможно, версия PowerShell (похожая, но не эквивалентная), которую ищет вопрос, это точка с запятой. Как было показано выше, способ использования &&
без потери выходных данных заключается в следующем:
build_command; run_tests_command
Ответ 10
Это зависит от контекста, но вот пример "-and" в действии:
get-childitem | where-object { $_.Name.StartsWith("f") -and $_.Length -gt 10kb }
Таким образом, чтобы получить все файлы размером более 10 КБ в каталоге, имя файла которого начинается с "f".
Ответ 11
if (start-process filename1.exe) {} else {start-process filename2.exe}
Это немного дольше, чем "& &" но выполняет одно и то же без сценариев и не слишком сложно запомнить. Лучше поздно, чем никогда.:)
Ответ 12
Мы можем попробовать эту команду вместо использования && Метод
try {hostname; if ($ lastexitcode -eq 0) {ipconfig/all | findstr/i bios}} catch {echo err} наконец {}