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

PowerShell中提取文件名前缀并构建目标目录结构的方法

PowerShell 文件批量复制与目录结构构建解决方案

完整实现代码

$sourcePath = "\\files\data"
$targetRoot = "/target" # 替换为实际目标根目录,Windows环境可改为类似 "C:\target" 的格式

# 获取源目录下所有非目录文件
$fileSystemItems = Get-ChildItem $sourcePath -Recurse | Where-Object { !$_.PSIsContainer }

foreach ($file in $fileSystemItems) {
    # 提取文件名前缀(截取_DATE之前的部分)
    $prefix = ($file.Name -split '_DATE')[0]
    # 正则匹配替代方案(更严谨,适配格式有细微变化的情况):
    # if ($file.Name -match '^(.+?)_DATE') { $prefix = $matches[1] }

    # 输出要求的前缀与原文件名
    Write-Host "前缀:*$prefix*,原文件名:*$($file.Name)*"

    # 构建目标子目录路径
    $targetDir = Join-Path -Path $targetRoot -ChildPath $prefix
    # 若目标子目录不存在则创建
    if (-not (Test-Path -Path $targetDir)) {
        New-Item -Path $targetDir -ItemType Directory | Out-Null
    }

    # 构建目标文件完整路径并复制文件
    $targetFilePath = Join-Path -Path $targetDir -ChildPath $file.Name
    Copy-Item -Path $file.FullName -Destination $targetFilePath -Force
}

关键步骤说明

  • 提取前缀:
    • 简单方案:使用-split '_DATE'将文件名按_DATE分割,取数组第一个元素即可得到前缀(如DATAFILE1),适合文件名格式固定的场景。
    • 严谨方案:用正则表达式^(.+?)_DATE匹配文件名开头到第一个_DATE的内容,通过$matches[1]获取捕获的前缀,适配格式可能存在细微变化的情况。
  • 输出内容:通过Write-Host直接输出带强调格式的前缀和原文件名,满足需求。
  • 目标目录处理:用Join-Path拼接目标子目录路径,Test-Path检查目录是否存在,不存在则自动创建,确保复制路径有效。
  • 文件复制:使用Copy-Item而非Rename-Item,避免修改源文件(解决源文件被占用无法修改的问题),-Force参数可按需开启,用于覆盖已存在的同名文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:10:15