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() 指定吗?在 main() 里调用 os.exit() 会让我无法使用 defer,并产生以下诊断。 这条 GitHub Discussion 提出了下面的办法。 Odin 的 main 过程能返回一个值吗? G…

    回复 3最近活动 odin
  3. 应用出现异常和错误时发送邮件提醒

    我想让应用每次遇到错误时都发一封邮件。 包含异常、.go 文件名和对应的行号。 这样对我们很有帮助

    回复 2最近活动 go