programing

Get-ChildItem은 어떻게 결과가 없음(파일 0개)에 대해 테스트할 수 있습니까?

codeshow 2023. 8. 26. 00:07
반응형

Get-ChildItem은 어떻게 결과가 없음(파일 0개)에 대해 테스트할 수 있습니까?

저는 단순한 문제인 것처럼 보이는 것에 대해 여기서 당황스럽습니다. 여기 있는 완고한 사람들에게 미안합니다.

없어진 백업 파일을 정리하는 스크립트가 있습니다.파일을 식별한 후에 저는 루프오버하여 덤프된 내용을 출력합니다.없어진 파일이 없을 때 피드백/테스트를 제공하는 데 문제가 발생합니다.대본은...

$Files = Get-ChildItem $BackupPath_Root -include *.bak -recurse 
           | where {$_.CreationTime  -le $DelDate_Backup }  

if ( $Files -eq "" -or $Files.Count  -eq 0 ) {
    write-host "   no files to delete."    #<-- this doesn't print when no files
} else {
   foreach ($File in $Files) {
      write-host “$File” 
      Remove-Item $File | out-null
   } 
}

파일이 없는 경우 if 검사에서 파일이 없는 상태가 발생하지 않습니다.적절한 테스트 방법은 무엇입니까?$Files아무 결과도 없이?

포장해 보세요.@(..)항상 배열을 만듭니다.

$Files = @(Get-ChildItem $BackupPath_Root -include *.bak -recurse 
           | where {$_.CreationTime  -le $DelDate_Backup })
if ($Files.length -eq 0) {
  write-host "   no files to delete." 
} else {
  ..
}

파일이 없는 경우 $Files는 $null과 같으므로 EBGreen에서 제안한 대로 $null과 비교하여 테스트해야 합니다.또한 $Files.개수는 결과가 파일 모음일 때만 유용합니다.결과가 스칼라(하나의 개체)이면 카운트 속성이 없고 비교가 실패합니다.

성능 팁: 하나의 확장 유형만 검색해야 하는 경우 공급자 수준에서 필터링할 때 -Include 대신 -Filter 매개 변수를 사용합니다.

검색된 폴더가 비어 있으면 변수가 null 값 식으로 평가됩니다.사용할 수 있는 항목:

if (!$Files) {
# ...
}

$files - eq $null도 테스트해 보십시오.

get-childitem 명령 앞에 [bool] 유형을 지정하면 발견된 항목이 있으면 True를 반환하고, 발견된 항목이 없으면 false를 반환합니다.이것이 에밀리아노의 대답이지만 부정적인 요구는 없습니다.둘 중 하나라도 작동할 수 있지만, 저는 좀 더 쉽게 따라할 수 있도록 좀 더 복잡한 조건문이 있는 [bool]을 선호합니다.

[bool](Get-ChildItem C:\foo.txt)

If 문에 사용됨

if ([bool](Get-ChildItem C:\foo.txt)) {write-output "foo.txt exists"}

언급URL : https://stackoverflow.com/questions/6859956/how-can-get-childitem-be-tested-for-no-results-zero-files

반응형