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

PowerShell按文件名指定分段匹配复制文件问题求助

PowerShell按文件名独立分段复制文件的解决方案

原代码的问题

你的代码会复制所有文件,核心原因是:

  • $filepath = Get-ChildItem $path\*.*获取的是所有文件的集合,后续$String = $filepath.Name把所有文件名合并成了一个数组,拆分后循环时只要有任意一个文件的分段匹配805,就会执行copy-item $filepath $copypath,直接复制所有文件。
  • 没有针对单个文件做判断,而是批量处理了所有文件的名字。

修改后的方案(两种可选)

方案1:延续你拆分文件名的思路

逐个遍历文件,对每个文件的名字拆分后检查是否有独立的"805"分段:

$path = "Z:\QNAP\EH\powershell"
$copypath = "Z:\QNAP\EH\powershell\copy\"

# 遍历目录下的每个文件
Get-ChildItem $path\*.* | ForEach-Object {
    # 拆分当前文件的名字,分隔符是_和.
    $splitSegments = $_.Name.Split("_.")
    # 检查拆分后的分段里是否存在完全等于"805"的项
    if ($splitSegments -contains "805") {
        # 复制当前符合条件的文件
        Copy-Item $_.FullName -Destination $copypath
    }
}

方案2:用正则表达式直接匹配(更简洁)

通过正则匹配文件名中被_或.包围的"805",确保它是一个独立分段:

$path = "Z:\QNAP\EH\powershell"
$copypath = "Z:\QNAP\EH\powershell\copy\"

# 筛选出文件名包含独立分段805的文件,再复制
Get-ChildItem $path\*.* | 
    Where-Object { $_.Name -match '(?:^|_)805(?:_|$|\.)' } |
    Copy-Item -Destination $copypath

正则说明:

  • (?:^|_):匹配文件名开头,或者下划线(确保805前面是分隔符或开头)
  • 805:目标匹配内容
  • (?:_|$|\.):匹配下划线、文件名结尾,或者点号(确保805后面是分隔符或结尾)

这两种方案都能精准匹配你需要的两个文件,不会误复制包含"080500032"的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:37:23