Windows10环境下PowerShell5.1搜索备份zip文件报错如何解决
问题根源
- 第一次报错是原始代码笔误:
Get-ChildItem -Path -$filePath中$filePath前多了多余的减号,拼接后路径变成-M:\BACKUPS\,PowerShell误将-M识别为驱动器名,触发找不到驱动器的错误。 - 第二次报错是修改逻辑错误:你移除了
-Path参数名,同时保留了原有的$filePath变量,导致Get-ChildItem接收到两个无标记的路径参数,后续的*.zip找不到对应参数位,触发参数绑定错误。 - 原始代码还有两处隐性问题:
- 结果写入CSV的行语法错误,
>> $RemotePath = M:\BACKUPS\FOUND\ZIPMATCH.csv不符合PowerShell语法规则 - 手动拼接CSV字符串的方式,遇到文件名包含逗号等特殊符号时会导致CSV格式错乱
- 结果写入CSV的行语法错误,
修复后完整代码
# 配置项,可按需修改 $filePath = "M:\BACKUPS\" $searchTerms = @("YOMoma") $outputCsvPath = "M:\BACKUPS\FOUND\ZIPMATCH.csv" # 自动创建输出目录 $outputDir = Split-Path $outputCsvPath -Parent if (-not (Test-Path $outputDir)) { New-Item -ItemType Directory -Path $outputDir | Out-Null } function openZip($zipFile){ try{ [Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null $zipContens = [System.IO.Compression.ZipFile]::OpenRead($zipFile) $zipContens.Entries | ForEach-Object { foreach($searchTerm in $searchTerms){ if ($_.Name -imatch $searchTerm){ # 输出结构化对象,方便后续导出CSV [PSCustomObject]@{ FileName = $_.Name FullPathInZip = $_.FullName CompressedLength = $_.CompressedLength LastWriteTime = $_.LastWriteTime OriginalLength = $_.Length SourceZipFile = $zipFile } } } } $zipContens.Dispose() } catch{ Write-Output ("Error processing $zipFile : " + $_.Exception.Message) } } Write-Host "Search path: " $filePath Write-Host "Search terms: " ($searchTerms -join ", ") # 遍历所有zip文件搜索,结果直接导出为CSV Get-ChildItem -Path $filePath -Filter *.zip -Recurse | ForEach-Object { openZip $_.FullName } | Export-Csv -Path $outputCsvPath -NoTypeInformation -Encoding UTF8
使用说明
- 需要修改搜索关键词直接修改
$searchTerms数组即可,支持同时传入多个关键词,比如@("YOMoma", "报销单", "2024项目") - 代码兼容PowerShell 5.1版本,无需额外权限
- 最终匹配结果会包含来源zip包路径,方便你定位文件所在的备份包
内容的提问来源于stack exchange,提问作者jumboshrimps
相关产品推荐
相关产品推荐

