You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell如何获取含指定关键词文件及同名文件夹内所有文件?

PowerShell 实现两类文件检索复制方案

你当前编写的代码仅能匹配名称包含car的文件与目录项,无法自动拉取名称为car的文件夹下所有文件名不含car的内容,可通过分两类检索、去重后统一复制的逻辑实现需求,同时可增加权限报错屏蔽、目录自动创建的兼容处理。

核心实现逻辑

  • 第一类匹配项:遍历C盘所有文件,筛选文件名包含car关键词的文件
  • 第二类匹配项:遍历C盘所有目录,筛选名称完全为car的文件夹,再提取这些文件夹下存储的所有文件(无论文件名是否包含car)
  • 合并两类匹配结果时按文件完整路径去重,避免同时满足两个条件的文件被重复复制
  • 增加无权限系统目录的错误屏蔽,避免脚本运行时弹出大量访问报错

全文件平铺复制到目标路径(不保留原目录结构)

直接将所有符合条件的文件复制到C:\Test根目录下,代码如下:

$sourceRoot = "C:\"
$destPath = "C:\Test"

# 目标路径不存在则自动创建
if (-not (Test-Path $destPath)) {
    New-Item -ItemType Directory -Path $destPath | Out-Null
}

# 检索第一类:文件名含car的所有文件
$carNameFiles = Get-ChildItem -Path $sourceRoot -Recurse -File -Filter "*car*" -ErrorAction SilentlyContinue

# 检索第二类:名为car的文件夹下的所有文件
$carFolderFiles = Get-ChildItem -Path $sourceRoot -Recurse -Directory -Filter "car" -ErrorAction SilentlyContinue | 
    Get-ChildItem -File -Recurse -ErrorAction SilentlyContinue

# 合并结果去重后执行复制
$allMatchFiles = $carNameFiles + $carFolderFiles | Sort-Object FullName -Unique
$allMatchFiles | Copy-Item -Destination $destPath -Force

保留原目录结构复制

如果需要在目标路径下保留文件原来的层级目录结构,将上述代码最后一行复制命令替换为以下内容即可:

$allMatchFiles | ForEach-Object {
    $relativePath = $_.FullName.Substring($sourceRoot.Length)
    $targetFullPath = Join-Path $destPath $relativePath
    $targetParentDir = Split-Path $targetFullPath -Parent
    # 提前创建目标文件对应的父目录
    if (-not (Test-Path $targetParentDir)) {
        New-Item -ItemType Directory -Path $targetParentDir -Force | Out-Null
    }
    Copy-Item -Path $_.FullName -Destination $targetFullPath -Force
}

注意:脚本默认会强制覆盖目标路径下已存在的同名文件,如果不需要覆盖,去掉Copy-Item命令后的-Force参数即可。

内容的提问来源于stack exchange,提问作者MajorAnonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 04:48:24