openlang

입력 파일이 없을 때 알아내기

안녕하세요, 제가 만든 스크립트에서 문제가 생겼어요. 웹에서 찾아봐도 해결책이 없네요.

폴더에 매일(적어도 이론상으로는) 특정 파일들이 들어오고 약 3주 치가 보관돼요. 필요한 파일 내용은 csv 비슷하고 이름에는 늘 두 문자열이 들어가요. “SDD_492813_030_031_IBZXCD”와 “.csv”요(실제 확장자는 .csv가 아니라 .sav예요).

스크립트가 매일 전날 파일을 골라 가져와 처리하는데, 사흘 전에는 파일이 없어서 실패했어요. 파일이 있는지 확인한 뒤 없으면 오류를 표시하고 싶어요.

온라인에서는 [System.IO.File]::Exists($path)나 test-path를 얘기하지만, 공통 문자열 2개 외에는 매일 이름이 예측할 수 없게 달라져서 전체 경로를 미리 알 수 없어요.

현재 코드는 이래요

$InputDirectory = "D:\Incoming"

$DailyInput = (Get-ChildItem -Path $InputDirectory  -Include "*SDD_492813_030_031_IBZXCD*" "*.csv*" -Recurse | ? {
  $_.LastWriteTime -gt (Get-Date).AddDays(-2) #pick files from the prior day
})

$Records = Import-Csv -Path $DailyInput -Delimiter '|' -ErrorAction Stop # read the selected file

생각 중인 건 if $DailyInput is null 같은 검사예요

{

오류 표시

}

Else

{

$Records = Import-CSV …

}

미리 감사해요

Tavin

영어에서 번역원문 보기

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    코드를 보니 저도 처음 생각하신 방식으로 하겠어요. 결국 $DailyInput에 뭔가 들어 있거나 없거나죠. 가져오는 부분을 다음처럼 바꿀 수 있어요:

    if ($DailyInput) {
      $Records = Import-Csv -Path $DailyInput -Delimiter '|' -ErrorAction Stop
    } else {
      Write-Error "Missing input file"
    }

    그 뒤에는 평소처럼 계속하면 돼요.

    조금 더 자세히 설명하면, 조건에 변수 하나만 넣을 때는 그 값을 불리언으로 변환하려고 해요.

    PS> $words = "a little text"
    PS> [bool]$words
    True
    PS> $empty = ""
    PS> [bool]$empty
    False

    변수에 fileinfo 객체가 들어 있으면 $true로 평가되고, 그렇지 않으면 $false가 돼요. 다른 상황에 적용할 때 주의할 점은 변수가 정수 0을 가질 수 있다면 그 경우에는 False로 변환된다는 거예요

    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. F#에서 파일 존재 여부를 검사할 때의 부정 연산

    파일이 없으면 오류를 내려고 아래 코드를 쓰고 있어요. 그런데 이 오류가 나와요. 제가 뭘 잘못 이해한 건가요?

    답글 2최근 활동 fsharp
  2. 제어 흐름을 방해하지 않고 main()에서 종료 상태를 지정할 수 있나요?

    종료 상태는 반드시 os.exit()로 지정해야 하나요? main() 안에서 os.exit()를 호출하면 defer를 쓸 수 없고 다음 진단이 나옵니다: 이 GitHub Discussion에서는 아래 방식을 제안합니다: Od…

    답글 3최근 활동 odin
  3. 애플리케이션 예외와 오류를 이메일로 알리기

    애플리케이션에서 오류가 날 때마다 이메일을 보내고 싶습니다. 예외와 .go 파일 이름, 해당 줄 번호도요. 그러면 저희에게 정말 도움이 됩니다

    답글 2최근 활동 go