繁体   English   中英

使用Array和get-childitem查找具有特定ID的文件名

[英]Using Array and get-childitem to find filenames with specific ids

从最基本的意义上讲,我有一个SQL查询,该查询返回ID数组,并将其存储在变量$ID 然后,我想对包含所述变量( $ID )中的任何ID的任何文件名在特定文件夹上执行Get-childitem 。可能存在三种可能的文件名:

  • $ID.xml
  • $ID_input.xml
  • $ID_output.xml

get-childitem的结果后,我想将其输出为文本文件并从文件夹中删除文件。 我遇到问题的部分是过滤get-childitem的结果以定义我要查找的文件名,以便在我的get-childitem结果中仅显示包含SQL输出ID的文件。

我找到了另一种方法,通过使用for-each ($i in $id) ,然后从中构建所需的文件名并对它们执行删除操作,该方法很好用:

# Build list of XML files
$XMLFile = foreach ($I in $ID)
        {
          "$XMLPath\$I.xml","$XMLPath\$I`_output.xml","$XMLPath\$I`_input.xml"
        }

# Delete XML files
$XMLFile | Remove-Item -Force

但是,这会在Shell中产生很多错误,因为它试图删除不存在但ID确实存在于数据库中的文件。 我也无法弄清楚如何为实际删除的文件生成文本输出,以这种方式进行,因此,如果可能的话,我想回到get-childitem方法。

任何想法将不胜感激。 如果您需要更多信息,请询问。

尝试这个:

clear
$ID = "a", "b", "c"
$filesToDelete = New-Object System.Collections.ArrayList
$files = Get-ChildItem e:\
foreach ($I in $ID)
    {
      ($files | Where-object { $_.Name -eq "$ID.xml" }).FullName | ForEach-Object { $filesToDelete.Add($_) }
      ($files | Where-object { $_.Name -eq "$ID_input.xml" }).FullName | ForEach-Object { $filesToDelete.Add($_) }
      ($files | Where-object { $_.Name -eq "$ID_output.xml" }).FullName | ForEach-Object { $filesToDelete.Add($_) }
    }
$filesToDelete | select-object -Unique | ForEach-Object { Remove-Item $_ -Force }

您可以找到所有带有Get-ChildItem *.xml文件,以最大程度地减少要测试的文件数量,然后使用正则表达式匹配文件名。 它比循环/多重测试快,但是如果您不熟悉正则表达式,则很难阅读。

$id = 123,111

#Create regex-pattern (search-pattern)
$regex = "^($(($id | ForEach-Object { [regex]::Escape($_) }) -join '|'))(?:_input|_output)?$"

$filesToDelete = Get-ChildItem -Path "c:\users\frode\Desktop\test" -Filter "*.xml" | Where-Object { $_.BaseName -match $regex }

#Save list of files
$filesToDelete | Select-Object -ExpandProperty FullName | Out-File "deletedfiles.txt" -Append

#Remove files (remove -WhatIf when ready)
$filesToDelete | Remove-Item -Force -WhatIf

正则表达式演示: https : //regex101.com/r/dS2dJ5/2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM