Windows系统下如何查找同名不同扩展名的文件并移动
Windows 同名不同扩展名文件的检测与批量移动实现
不需要借助第三方工具,通过系统自带的PowerShell即可完成精准检测和移动操作,核心匹配逻辑为:提取每个文件的主文件名(即不含扩展名的部分)做分组统计,当同一主文件名对应多个不同扩展名的文件时,即可按需筛选目标扩展名的文件执行移动操作,完全适配你提到的file.txt、file.cmd这类同主名不同扩展名的场景。
可直接复用的操作流程
- 提前准备3项自定义参数:需要扫描的源文件夹路径、存放移动文件的目标文件夹路径、需要筛选移动的目标扩展名(如示例中要移走的
.cmd) - 右键点击开始菜单,选择「Windows PowerShell」打开终端,粘贴以下带参数配置的脚本:
# 替换为你自己的实际路径和筛选规则 $sourceDirectory = "C:\存放待整理文件的文件夹路径" $targetDirectory = "C:\要把文件移动到的目标路径" $moveExtension = ".cmd" # 按主文件名分组,筛选存在多个同主名文件的分组 Get-ChildItem -Path $sourceDirectory -File | Group-Object -Property BaseName | Where-Object { $_.Count -ge 2 } | ForEach-Object { # 定位分组内符合移动要求的文件 $targetFiles = $_.Group | Where-Object Extension -eq $moveExtension foreach ($file in $targetFiles) { Move-Item -Path $file.FullName -Destination $targetDirectory } }
- 修改完脚本内的参数后按下回车,即可自动完成检测和移动操作
效果说明与适配调整
- 脚本会自动跳过无同主名关联的文件:比如单独存在的
random.cmd因为没有其他以random为主文件名的文件,不会被误移动;只有和file.txt同主名的file.cmd会被精准识别并移动 - 如需连带扫描源文件夹下所有子目录的文件,只需给
Get-ChildItem命令追加-Recurse参数即可 - 初次使用担心误操作的话,可以先把脚本里的
Move-Item命令替换成Write-Output,跑一遍预览即将被移动的文件清单,确认清单和预期完全一致后,再改回移动命令执行 - 如果需要一次性移动某分组内除指定保留扩展名之外的所有文件,只需把
$moveExtension对应的判断逻辑调整为排除需要保留的扩展名即可
内容的提问来源于stack exchange,提问作者DRKM43
相关产品推荐
相关产品推荐

