programing

PowerShell에서 "&&" 또는 "-and" 작업을 수행할 수 있습니까?

jooyons 2023. 5. 5. 09:40
반응형

PowerShell에서 "&&" 또는 "-and" 작업을 수행할 수 있습니까?

참고: 이 질문은 2009년에 처음 제기되었는데, 파워셸은 이를 지원하지 않았습니다.&&교환입니다.2019년에 Jay의 답변에 따르면 마이크로소프트는 다음에 대한 지원을 추가했습니다.&&그리고.||Powershell 7. https://stackoverflow.com/a/564092/234 에서 확인할 수 있습니다.


원래 질문

&&구글 검색에서 검색하는 것은 악명높지만, 내가 찾은 최고는 사용하라는 이 기사입니다.-and.

유감스럽게도 더 이상의 정보를 제공하지 않으며, 제가 어떻게 해야 하는지 알 수 없습니다.-and(다시 말하지만, 검색하기로 악명 높은 것입니다.)

제가 사용하려는 컨텍스트는 "실행 cmd1, 성공하면 실행 cmd2"입니다. 기본적으로 다음과 같습니다.

csc /t:exe /out:a.exe SomeFile.cs && a.exe

개의 첫 번째 실패하든 한줄에여명실행고첫실명번실다상다수있명니사습령할용을 ▁if▁you▁on▁use다수▁and있▁can니습▁commands한▁multiple▁you사할용▁want명▁line▁you▁a▁single▁just▁if▁run▁or를 사용할 수 있습니다.;제 목적은 대부분 이것으로 괜찮습니다.

예:kill -n myapp; ./myapp.exe.

CMD에서 '&&'은 "명령 1을 실행하고, 성공하면 명령 2를 실행하라"는 의미입니다.다음과 같은 용도로 사용했습니다.

build && run_tests

PowerShell에서 가장 가까운 기능은 다음과 같습니다.

(build) -and (run_tests)

논리는 동일하지만 명령의 출력 텍스트는 손실됩니다.하지만 그것은 당신에게 충분할지도 모릅니다.

스크립트에서 이 작업을 수행하는 경우 다음과 같이 문을 구분하는 것이 좋습니다.

build
if ($?) {
    run_tests
}

2019/11/27:&&이제 PowerShell 7 Preview 5+에서 연산자를 사용할 수 있습니다.

PS > echo "Hello!" && echo "World!"
Hello!
World!

&&그리고.||구현할 항목 목록에 포함되었지만 다음으로 가장 유용한 항목으로 팝업되지 않았습니다.에게 그이는우리가 있기 입니다.-AND그리고.-OR.

중요하다고 생각되는 경우 Connect에 제안을 제출하면 V3용으로 고려해 보겠습니다.

사용해 보십시오.

$errorActionPreference='Stop'; csc /t:exe /out:a.exe SomeFile.cs; a.exe

을 cmd: cmd.exe)로 사용할 수 python ./script.py인 PowerShell 명령어가 아닙니다.ii .(윈도우즈 탐색기에서 현재 디렉터리를 여는 것을 의미), cmd를 실행할 수 있습니다.exe를 입력합니다.구문은 다음과 같습니다.

cmd /c "command1 && command2"

여기서,&&는 이 질문에서 설명한 cmd 구문에 의해 제공됩니다.

PowerShell에서 다음과 같은 일련의 명령을 사용해 보았습니다.

첫 번째 테스트

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)거짓으로 반환되었고 지금까지 나는 추정해야 합니다.(Get-Content $MyVar)또한 false를 반환했습니다.

세 번째 테스트는 두 번째 조건이 분석되지 않았다는 것을 증명했습니다.

PS C:\> ($MyVar -ne $null) -and (Get-Content "C:\MyTxt.txt")
False

($MyVar -ne $null)거짓으로 반환되고 두 번째 조건을 증명했습니다.(Get-Content "C:\MyTxt.txt")명령 전체에 대해 거짓을 반환하여 실행하지 않았습니다.

아주 오래된 질문이지만, 새로 온 사람들에게는: 질문이 찾고 있는 PowerShell 버전(비슷하지만 동등하지는 않음)을 사용하는 것일 수 있습니다.-and다음과 같이:

(build_command) -and (run_tests_command)

PowerShell 7을 설치하기만 하면 됩니다(여기로 이동하여 자산 섹션을 스크롤하고 확장하십시오). 릴리스에서는 파이프라인 체인 연산자를 구현했습니다.

장황한 등가물은 다음을 결합하는 것입니다.$LASTEXITCODE그리고.-eq 0:

msbuild.exe args; if ($LASTEXITCODE -eq 0) { echo 'it built'; } else { echo 'it failed'; }

왜 그런지 모르겠어요.if ($?)저한테는 안 먹혔지만 이번엔 먹혔죠

사용:

if (start-process filename1.exe) {} else {start-process filename2.exe}

&&보다 조금 더 길지만 스크립팅 없이 동일한 작업을 수행하고 기억하기 어렵지 않습니다.

나는 단순하다고 생각합니다.if진술은 이것을 달성할 수 있습니다.마지막 종료 상태가 $?에 저장된다는 mkeelement0의 응답을 보고 다음을 정리했습니다.

# Set the first command to a variable
$a=somecommand

# Temporary variable to store exit status of the last command (since we can't write to "$?")
$test=$?

# Run the test
if ($test=$true) { 2nd-command }

OP의 예는 다음과 같습니다.

a=(csc /t:exe /out:a.exe SomeFile.cs); $test = $?; if ($test=$true) { a.exe }

저도 같은 문제에 직면한 적이 있습니다.이전 버전의 파워셸을 사용하고 있기 때문입니다(Windows 11에 이미 있습니다).버전을 확인하려면 파워셸에 다음을 입력합니다.$PSVersionTable

저는 제가 실제로 버전 5를 사용하고 있다는 것을 알았지만, 최신 버전은 7.4입니다.

PSVersion                      5.1.22621.963
PSEdition                      Desktop

최신 버전을 설치한 후(별도로 다운로드하거나 Microsoft Store로 이동할 수 있음) 새 버전으로 성공적으로 전환했는지 확인합니다(이전 버전을 대체하지 않는 새 버전을 설치하므로 이 버전을 선택하려면 추가 구성이 필요할 수 있습니다.

PSVersion                      7.3.2
PSEdition                      Core

내가 최신 버전으로 바꾼 후에&&완벽하게 작동합니다.

상황에 따라 다르지만 다음은 "-and"의 예입니다.

get-childitem | where-object { $_.Name.StartsWith("f") -and $_.Length -gt 10kb }

따라서 파일 이름이 "f"로 시작하는 디렉터리에 10kb 이상의 모든 파일이 저장됩니다.

2023년에, 당신은 사용할 수 있습니다.;연산자를 입력합니다.

&&효과가 없는 것 같습니다.

&& 메서드를 사용하는 대신 다음 명령을 사용할 수 있습니다.

try {hostname; if ($lastexitcode -eq 0) {ipconfig /all | findstr /i bios}} catch {echo err} finally {}

언급URL : https://stackoverflow.com/questions/563600/can-i-get-or-and-to-work-in-powershell

반응형