如何使用Get-ChildItem搜索多名称文件并实现自动复制?
修复PowerShell搜索复制脚本
原脚本的问题
- 数组索引语法错误:PowerShell中访问数组元素需要用
$files[$i],原脚本写成$files[i],导致语法报错 - 报告文件被覆盖:
Out-File默认会覆盖已有文件,循环中每次执行都会清空之前的结果 - 缺少文件复制逻辑:原脚本仅输出路径,未实现复制到指定文件夹的功能
修复后的完整脚本
# 定义要搜索的驱动器路径 $paths = "C:\", "D:\", "E:\", "F:\" # 定义要匹配的文件名关键词 $fileKeywords = "FileA", "FileB", "FileC" # 指定目标复制文件夹(请自行修改) $targetFolder = "C:\TargetFiles" # 指定报告文件路径 $reportPath = "C:\report.txt" # 确保目标文件夹存在,不存在则创建 if (-not (Test-Path -Path $targetFolder)) { New-Item -ItemType Directory -Path $targetFolder | Out-Null } # 清空原有报告文件 if (Test-Path -Path $reportPath) { Clear-Content -Path $reportPath } # 遍历每个文件名关键词进行搜索 foreach ($keyword in $fileKeywords) { # 构建过滤规则:匹配包含关键词的.txt文件(可根据实际扩展名修改) $filter = "*$keyword*.txt" # 搜索文件 $foundFiles = Get-ChildItem -Path $paths -Recurse -Filter $filter -ErrorAction SilentlyContinue if ($foundFiles) { # 将找到的文件路径追加到报告 $foundFiles.FullName | Out-File -Path $reportPath -Append # 复制文件到目标文件夹 $foundFiles | Copy-Item -Destination $targetFolder -Force Write-Host "已复制关键词[$keyword]对应的文件到目标文件夹" } else { Write-Host "未找到关键词[$keyword]对应的文件" "未找到关键词[$keyword]对应的文件" | Out-File -Path $reportPath -Append } } Write-Host "Press any key to continue..." $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
关键修改说明
- 修正数组索引:改用
foreach遍历数组(比for循环更简洁直观,也避免了索引错误) - 报告文件追加写入:添加
-Append参数,保留所有搜索结果 - 自动创建目标文件夹:用
Test-Path和New-Item确保复制目标路径存在 - 添加复制逻辑:使用
Copy-Item将找到的文件复制到指定文件夹,-Force参数覆盖已存在的同名文件 - 错误处理:添加
-ErrorAction SilentlyContinue避免因权限问题导致脚本中断 - 状态提示:添加控制台输出,实时显示搜索和复制状态
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

