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

PowerShell脚本按文件名规则复制文件异常:所有文件均被复制

解决PowerShell脚本复制全部文件的问题

我来帮你搞定这个脚本问题!你的代码现在会复制整个文件夹内容的核心原因是:你在Copy-Item里传入的是源文件夹路径$source,而不是当前遍历到的单个文件$file。这样不管文件是否匹配规则,每次判断都会触发整个文件夹的复制,自然会把所有内容都拷贝过去。

修正后的基础版本

下面是修复后的代码,我还做了几个小优化让逻辑更清晰:

$source = "E:\GatewaysRenditionArea\pdf"
# 加上-File参数,只遍历文件夹里的文件,排除子文件夹
$fileList = Get-ChildItem -Path $source -File

ForEach ($file in $fileList) {
    # 用文件名称匹配更精准,不需要用到完整路径
    if ($file.Name -like "*PID*.pdf") {
        # 复制当前符合条件的单个文件,而不是整个源文件夹
        Copy-Item -Path $file.FullName -Destination "E:\Gateway\GatewaysStagingArea\PID - Piping and Instrumentation Diagram"
    } 
    elseif ($file.Name -like "*BOM*.pdf") {
        Copy-Item -Path $file.FullName -Destination "E:\Gateway\GatewaysStagingArea\BOM - Bill of Materials"
    }
}

关键修改点:

  • 目标路径修正:把Copy-Item的-Path从$source改成$file.FullName,确保只复制当前匹配的单个文件。
  • 过滤文件类型:给Get-ChildItem加上-File参数,避免遍历源文件夹里的子文件夹(如果有的话)。
  • 匹配逻辑优化:用$file.Name代替$file.FullName做匹配,因为我们只需要检查文件名是否包含关键词,路径部分不影响判断。

更高效的优化版本

如果你的源文件夹文件较多,直接用Get-ChildItem的过滤参数可以减少遍历次数,代码也更简洁:

$source = "E:\GatewaysRenditionArea\pdf"
$pidDestination = "E:\Gateway\GatewaysStagingArea\PID - Piping and Instrumentation Diagram"
$bomDestination = "E:\Gateway\GatewaysStagingArea\BOM - Bill of Materials"

# 直接过滤PID文件并复制
Get-ChildItem -Path $source -File -Filter "*PID*.pdf" | Copy-Item -Destination $pidDestination

# 直接过滤BOM文件并复制
Get-ChildItem -Path $source -File -Filter "*BOM*.pdf" | Copy-Item -Destination $bomDestination

这个版本利用PowerShell的管道特性,先筛选出符合条件的文件,再直接传递给Copy-Item,省去了手动遍历判断的步骤,执行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:45:35