【问题标题】:To check if all the files exists in a folder using powershell使用powershell检查文件夹中是否存在所有文件
【发布时间】:2018-04-18 10:43:02
【问题描述】:

您好,我是 powershell 新手。

我有一个文件夹 2017,其中有 12 个子文件夹(从 1 月到 12 月)。在子文件夹中,还有更多文件夹(例如,一月有 31 个文件夹,二月有 28 个文件夹,三月有 31 个文件夹,依此类推)。在这些文件夹中将有 10 个文件。我需要编写一个脚本,其中我必须在这些文件夹、子文件夹中循环并检查这 10 个文件是否存在。谁能指导一下?

我需要添加以下条件:如果 2017 文件夹没有 12 个文件则失败,如果 Jan 文件夹没有 31 个文件夹则失败,如果这 31 个文件夹中的文件不存在则再次失败( 31 个文件夹中的每个文件夹内将有 10 个文件)。关于如何实施的任何建议?

如果需要任何信息,请告诉我。

谢谢。

【问题讨论】:

  • 是否需要通过文件名、扩展名等检查文件?

标签: powershell organization


【解决方案1】:

在 PowerShell 中满足规范的代码非常简单——如果你真的只需要“失败”。

虽然最简单的版本(首先显示)没有指明故障位置,但底部有一个简单的增强建议,用于过滤故障目录:

$BasePath = 'C:\'   # Parent of the 2017 directory
#  *\*\*  --> MONTHS\DAYS\FILES 
$totals = dir "$BasePath\2017\*\*\*" -file      | 
          Group-Object directoryname -noElement | 
          measure count -minimum -maximum -sum 

IF ($Totals.Sum -ne 3650 -or $Totals.Maximum -ne 10 -or $Totals.Minimum -ne 10) { 
  "FAIL" 
} else {
  "Succeed"
}
$Totals  # just show the totals if you wish

搜索路径中的 3 个星号是三个目录级别的通配符::MONTH 级别、DAY 级别和 FILES。 2017***

许多 PowerShell cmdlet 允许在路径规范的多个“目录”元素中使用完整的通配符。

  1. MONTH 级别(一年中的 12 个月)
  2. DAY 级别(28-31 取决于月份)
  3. 文件级别(每个应为 10)

最终的文件模式可以更改为“*.log”之类的内容,或者任何与正确添加的文件匹配的内容。

每个 'day' 目录应该有 10 个文件,而 2017 年有 365 天 * 10 个文件/天,因此预期总数为 3650(如果您需要检查 2016 年或 2020 年等,可以轻松添加闰年检查。 )

如果显示,组对象输出(对于我的“C:\Program Files”目录)如下所示:

Count Name
----- ----
  203
   12 C:\Program Files\7-Zip
    3 C:\Program Files\Appli...
   18 C:\Program Files\Beyon...
    4 C:\Program Files\Bonjour
   20 C:\Program Files\Class...
   ...

Measure-Object 输出(存储在 $Totals 中)如下所示:

Count    : 41
Average  :
Sum      : 747
Maximum  : 203
Minimum  : 1
Property : Count

由于每个目录必须有 10 个文件,每个目录都应该有 10 个目录名称(在 GROUP-OBJECT 计数中),因此 MINIMUM 和 MAXIMUM 都必须为 10。

您可以通过使用

过滤 Group-Object 结果来识别失败的目录
| Where-Object Count -ne 10

享受吧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 2011-02-12
    相关资源
    最近更新 更多