Powershell IF ELSE 基于文件大小

Powershell IF ELSE based on File Size

试图在 powershell 中找到一种允许我根据文件大小移动文件的方法。我找不到我要找的东西。我找到了如何仅移动特定大小的文件并执行其他 if/then 语句但不根据大小将文件移动到不同位置。

为什么我 need/want 这样做?我是运行的一个exe即使没有数据也能创建输出。所以有时文件是空的,有时它有数据。当它有数据时我需要它发送给某人,当它为空时我只是想将它放在备份文件夹中以供参考。

这部分让我根据大小移动文件:-cle 小于或等于

$BlankFiles = Get-ChildItem c:\test\*.rej | where { $_.Length -cle 0kb}

这部分让我检查是否存在空文件:经过大量阅读后 system.io.file over test-path

[System.IO.File]::Exists($BlankFiles)

将这些全部放在 IF/ELSE 语句中是我一直在努力解决的问题。我想出的答案如下。

我发布这个主要是因为我找不到确切的场景,如果有人发现我错过的这种方法有问题。

这是我想出的解决方案,我所做的所有测试似乎都按预期工作。注意:我一次只需要在一个文件上执行此操作,这就是为什么这样做有效以及为什么我省略了递归或循环步骤的原因。

如果文件是空白的,它会将其移动到备份文件夹并附加日期,如果它有数据,它会制作一个副本并将日期附加到备份文件夹并将带有日期附加的文件移动到另一个文件夹必要用户可以访问的位置。

我正在考虑检查文件中有多少行超过了文件的大小,但当空白时文件有时会出现 return,有时却没有'吨。所以我改用 size 方法

$BlankFiles = Get-ChildItem c:\test\*.rej | where { $_.Length -cle 0kb}

$date = Get-Date
$fndate = $date.ToString("MMddyyyy")

If ([System.IO.File]::Exists($BlankFiles) -eq "True") {
Move-Item C:\test\*.rej c:\test\blankfiles -"$fndate".rej
}
Else {
Copy-Item c:\test\*.rej c:\test\realfiles-"$fndate".rej
Move-Item c:\test\*.rej c:\user\accessible\realfiles-"$fndate".rej -Force
}

如果有人发现这样做有任何问题或有更好的建议,但正如我在测试中提到的那样,它似乎工作得很好,我想我会分享。