修改PowerShell脚本:移动无对应同名文件的JSON等类型文件
解决方案
你的核心需求是基于**文件名(不含扩展名)**匹配,找出目标文件夹中没有对应同名文件(无论扩展名是什么)的文件并移动。以下是修改后的PowerShell脚本:
# 指定文件夹路径 $sourceFolder = "C:\SourceFolder" # 存放.jpg等对应文件的文件夹 $targetFolder = "C:\TargetFolder" # 存放.json、.bat等需要处理的文件夹 $destinationFolder = "C:\DestinationFolder" # 存放无对应文件的目标位置 # 获取源文件夹中所有文件的基础文件名(不含扩展名),存入集合用于快速查找 $sourceBaseNames = Get-ChildItem -Path $sourceFolder -File -Recurse | ForEach-Object { $_.BaseName } | Select-Object -Unique # 获取目标文件夹中需要检查的所有文件 $targetFiles = Get-ChildItem -Path $targetFolder -File -Recurse # 遍历目标文件,筛选出无对应同名文件的条目并移动 foreach ($file in $targetFiles) { # 检查当前文件的基础文件名是否存在于源文件夹的集合中 if (-not $sourceBaseNames.Contains($file.BaseName)) { $destinationPath = Join-Path -Path $destinationFolder -ChildPath $file.Name # 移动文件,-Force参数可覆盖目标文件夹中同名文件(可选) Move-Item -Path $file.FullName -Destination $destinationPath -Force } }
关键修改说明
- 不再使用
Compare-Object按完整文件名和文件长度匹配,而是提取**文件基础名(不含扩展名)**作为匹配依据,适配未来新增的其他扩展名文件 - 使用
Select-Object -Unique避免源文件夹中同名不同扩展名的文件重复占用查找资源 - 新增
-Force参数(可选),如果目标文件夹已有同名文件可直接覆盖,不需要可删除该参数
内容的提问来源于stack exchange,提问作者Just a Caffinated machine
相关产品推荐
相关产品推荐

