修改PowerShell文件复制脚本以保留完整原文件名
修改PowerShell脚本以保留原始文件名并维持文件夹创建功能
没问题!我已经调整了你的脚本,它现在会保留文件的完整原始名称,同时依然会根据文件名中下划线分隔的前缀部分创建对应的文件夹结构。
原脚本的问题说明
原来的脚本会把整个文件名中的下划线替换成路径分隔符,导致文件名本身被拆分成了路径的一部分。现在我们要把逻辑拆分:用文件名的前缀部分(下划线分隔的前几段)创建文件夹,而目标文件名保持和原文件完全一致。
修改后的完整脚本
$SourceFolder = "D:\queries\" $targetFolder = "G:\queries\" $numFiles = (Get-ChildItem -Path $SourceFolder -Filter *.TXT).Count $i=0 Clear-Host; Write-Host 'This script will copy ' $numFiles ' files from ' $SourceFolder ' to ' $targetFolder Read-Host -prompt 'Press enter to start copying the files' Get-ChildItem -Path $SourceFolder -Filter *.TXT | ForEach-Object { # 拆分文件名,提取下划线分隔的前缀部分用于创建文件夹 $nameParts = $_.BaseName -split "_" $folderPath = $nameParts[0..($nameParts.Count-2)] -join "\" # 组合目标路径:目标文件夹 + 前缀文件夹路径 + 原始完整文件名 $destinationPath = Join-Path -Path $targetFolder -ChildPath $folderPath | Join-Path -ChildPath $_.Name [System.IO.FileInfo]$destination = $destinationPath if(!(Test-Path -Path $destination.Directory )){ New-Item -Path $destination.Directory.FullName -ItemType Directory -Force | Out-Null } [int]$percent = $i / $numFiles * 100 Copy-Item -Path $_.FullName -Destination $destination.FullName Write-Progress -Activity "Copying ... ($percent %)" -status $_.Name -PercentComplete $percent $i++ } Write-Host 'Total number of files read from directory '$SourceFolder ' is ' $numFiles Write-Host 'Total number of files that was copied to '$targetFolder ' is ' $i Read-Host -prompt "Press enter to complete..." Clear-Host;
关键修改点
- 新增了
$nameParts = $_.BaseName -split "_":把文件名(不含扩展名)按下划线拆分成数组 $folderPath = $nameParts[0..($nameParts.Count-2)] -join "\":取除了最后一段之外的所有部分,拼接成文件夹路径(比如TIM_DV_ORDERINQUERY会拆成TIM\DV)- 用两次
Join-Path组合出最终目标路径:先拼接目标文件夹和前缀路径,再加上原始完整文件名,确保文件名完全不变 - 添加了
-Force参数给New-Item,避免因为权限或已存在的小问题报错,同时用Out-Null屏蔽不必要的输出
效果示例
比如原文件是TIM_DV_ORDERINQUERY.TXT:
- 脚本会在目标文件夹下创建
TIM\DV子文件夹 - 复制后的文件依然是
TIM_DV_ORDERINQUERY.TXT,存放在G:\queries\TIM\DV\路径下
内容的提问来源于stack exchange,提问作者muggi
相关产品推荐
相关产品推荐

