openlang

Как обнаружить отсутствие входного файла

Здравствуйте, возникла трудность с моим скриптом. Поиск в интернете решения не дал.

В папку ежедневно (по крайней мере в теории) приходит определённый набор файлов, и хранятся они примерно 3 недели. Нужный файл по содержимому похож на csv, а в имени всегда присутствуют две строки. “SDD_492813_030_031_IBZXCD” и “.csv” (настоящее расширение у него .sav, а не .csv).

Скрипт каждый день выбирает вчерашний файл и импортирует его для обработки, но три дня назад файла не оказалось, и скрипт завершился с ошибкой. Хочу проверять наличие файла и выдавать ошибку, если его нет.

В интернете советуют [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()? Вызов os.exit() внутри main() не позволяет использовать defer и выдаё…

    Ответы 3Последняя активность odin
  3. Уведомления по почте об исключениях и ошибках приложения

    Хочу отправлять письмо всякий раз, когда в приложении возникает ошибка. исключение, имя файла .go и номер его строки. нам это…

    Ответы 2Последняя активность go