【发布时间】:2022-01-10 13:47:55
【问题描述】:
如果文件夹中的一个或多个文件与今天或昨天的日期匹配,我正在尝试输出 $message。在这种情况下,如果文件匹配日期,它应该为每个文件输出一条消息,例如,“文件 $filename 匹配”,其中 $filename 是匹配日期的文件的名称。
另一方面,如果文件与当前日期或昨天的日期不匹配,它也会返回一条消息,但只会返回一条文件名与日期不匹配的消息。
以下代码不会发生这种情况:
$in = $false
foreach ($file in Get-ChildItem -Path $Directory) {
$today = $file.LastWriteTime.Date -eq [datetime]::Today
$yesterday = $file.LastWriteTime.Date -eq [datetime]::Today.AddDays(-1)
if ($today -or $yesterday) {
$message = "file exists"
$in = $true
Write-Output $message
}
}
if ($in -eq $false) {
$message_error = "file does not exist"
Write-Output $message_error
}
当一个文件匹配日期(昨天或今天的日期)时,它会多次输出消息,如果像上面那样缩进超过 20 倍。
如果不匹配,它只输出1x,但应该是2x,因为有2个文件不匹配日期。
谁能给我一个提示?
输出应如下所示
如果文件夹中的一个或多个文件与日期匹配:
"File example.txt matches date
and
File example2.txt matches date"
如果文件夹中的文件与日期不匹配,则否则:
"File example.txt, example2.txt don't match dates"
编辑
相反,我正在尝试这样:
$in = $false
foreach ($file in Get-ChildItem -Path $Directory) {
$today = $file.LastWriteTime.Date -eq [datetime]::Today
$yesterday = $file.LastWriteTime.Date -eq [datetime]::Today.AddDays(-1)
if ($today -or $yesterday) {
$msg_found = "file" + $file "exists"
$in = $true
} else {
$msg_notfound = "File" + $file + "Not found"
}
Write-Output $msg_notfound
Write-Output $msg_found
这里的消息以正确的数量输出,但它们在任何情况下都会出现。如果我使用 if 循环会解决吗?
【问题讨论】:
-
你能发布预期的输出应该是什么样子吗?如果您希望它每次都告诉您,则必须将消息放在循环中的 if 语句中。看起来并不复杂,只需要知道预期的输出应该是什么样子。
-
我已经用预期的输出编辑了问题。
-
为你想要的输出创建一个哈希表......
-
仔细检查您发布的代码是否不止一次输出,因为目前我认为它不可能输出不止一次
-
@Otter 你说得对,我会编辑这个问题,在这种情况下,如果文件匹配实际上是可以的,但是如果它不匹配并且它进入第二个 if,它会打印$message_error 和 $message
标签: powershell foreach