【问题标题】:PowerShell script using array to check if file/folders existPowerShell脚本使用数组检查文件/文件夹是否存在
【发布时间】:2019-02-20 04:38:45
【问题描述】:

我创建了一个 PowerShell 脚本来检查某个位置是否存在特定文件夹/zip 文件,如果存在则将其删除。他们的名字被硬编码到一个数组中,然后在目的地搜索存在,然后被删除。它是这样流动的:

  1. 检查存在的文件,
  2. 如果在目的地没有找到匹配的名称,则将“不存在匹配的文件夹/文件”打印到日志中
  3. 将名称打印到现有文件夹/文件的日志中
  4. 删除匹配的文件。

它工作正常,但我想将 cmdlet 转为正常运行,而不是编写重复的代码。此外,它需要异常处理,但一旦我有一个用于查找和删除的工作功能,我想自己尝试一下。

我的代码:

[string[]]$folderArray = ("folder1","folder2","zipfile1","zipfile2")

Get-ChildItem -Path $path -Force |
    Where-Object { $_.Name -in $folderArray } |
    Select-Object FullName |
    Write-Output >> $log

Get-ChildItem -Path $path -Force | 
    Where-Object { $_.Name -in $folderArray } |
    % { Remove-Item $_.FullName -Recurse -Force }

【问题讨论】:

标签: powershell scripting


【解决方案1】:

因此,通过将代码包装在一个函数中并添加参数,它可以如下所示:

function Foo
{
param(
    [Parameter(Mandatory = $true)]
    [ValidateNotNull()]
    [string]$path,
    [Parameter(Mandatory = $true)]
    [ValidateNotNull()]
    [string]$log,
    [Parameter(Mandatory = $true)]
    [ValidateNotNull()]
    [string[]]$folderArray
  )

Get-ChildItem -Path $path -force |
    Where-Object { $_.Name -in $folderArray } |
    Select-Object FullName |
    Write-Output >> $log

Get-ChildItem -Path $path -Force | 
    Where-Object { $_.Name -in $folderArray } |
    % { Remove-Item $_.FullName -Recurse -Force }
}

【讨论】:

  • 感谢 Max,但我需要一个执行查找和删除的函数,而不是在我的代码中编写两个非常相似的 Get-ChildItem 命令。有一次,我完成了这个功能,我需要添加异常处理,它应该打印找到的文件夹/文件的名称,或者打印“在目标位置找不到匹配的项目”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 2016-11-24
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多