如何用PowerShell根据txt目录结构移动单文件夹内的所有文件
PowerShell 实现文件按指定结构迁移脚本
原有脚本问题说明
- 错误使用
$ENV:前缀调用不存在的系统环境变量,导致路径识别失败 - 错误将 Structure.txt 中记录的目标路径直接作为移动操作的源路径,实际源文件存放在 Global 文件夹下
- 多余的盘符裁剪逻辑,不符合需求中 Structure.txt 直接存储完整目标路径的设计
正确可运行脚本
# 定义基础路径,请根据实际情况修改 $globalFolder = "D:\Backup\Global" $structureTxtPath = "D:\Backup\Global\Structure.txt" # 读取Structure.txt内容,自动跳过空行 Get-Content -Path $structureTxtPath | Where-Object { $_ -match '\S' } | ForEach-Object { # 本条记录为目标完整路径 $targetFullPath = $_ # 提取目标文件名 $fileName = Split-Path -Path $targetFullPath -Leaf # 拼接源文件完整路径 $sourceFullPath = Join-Path -Path $globalFolder -ChildPath $fileName # 校验源文件是否存在 if (-not (Test-Path -Path $sourceFullPath -PathType Leaf)) { Write-Warning "源文件不存在,跳过:$sourceFullPath" return } # 获取目标路径的父目录 $targetParentDir = Split-Path -Path $targetFullPath -Parent # 父目录不存在则自动创建 if (-not (Test-Path -Path $targetParentDir -PathType Container)) { New-Item -Path $targetParentDir -ItemType Directory -Force | Out-Null Write-Host "已创建目标目录:$targetParentDir" } # 移动文件 Move-Item -Path $sourceFullPath -Destination $targetFullPath -Force Write-Host "已移动文件:$fileName -> $targetFullPath" }
注意事项
- 如果 Structure.txt 包含西里尔字符等非ASCII内容,请将文件保存为 UTF-8 带BOM 编码,避免读取时乱码
- 可先将脚本中
Move-Item行替换为Write-Host "测试移动:$sourceFullPath -> $targetFullPath"先跑一次确认逻辑无误后再执行实际移动操作 - 若需保留源文件备份,可将
Move-Item替换为Copy-Item
内容的提问来源于stack exchange,提问作者Mladen G
相关产品推荐
相关产品推荐

