Windows系统下如何批量按文件夹内首个.3ds文件名重命名文件夹?
Windows批量将文件夹重命名为内部首个.3ds文件的名称
优先推荐使用PowerShell,它对特殊字符(空格、中文、特殊符号)的兼容性更好,逻辑更清晰,出错概率低。批处理仅适合文件名无特殊字符的简单场景,局限性较大。
PowerShell 实现方法
- 打开PowerShell,切换到存放目标文件夹的根目录(例如:
cd D:\3DS_Folders) - 执行以下脚本:
Get-ChildItem -Directory | ForEach-Object { # 获取当前文件夹内的第一个.3ds文件 $targetFile = Get-ChildItem -Path $_.FullName -Filter "*.3ds" | Select-Object -First 1 if ($targetFile) { # 提取不带扩展名的文件名 $newFolderName = [System.IO.Path]::GetFileNameWithoutExtension($targetFile.Name) # 避免重复重命名 if ($newFolderName -ne $_.Name) { Rename-Item -Path $_.FullName -NewName $newFolderName -ErrorAction SilentlyContinue Write-Host "已完成:$($_.Name) → $newFolderName" } } else { Write-Host "警告:文件夹 $($_.Name) 中未找到.3ds文件" } }
脚本说明:
- 遍历根目录下所有子文件夹
- 对每个文件夹,查找第一个
.3ds文件 - 提取该文件的无扩展名名称作为新文件夹名
- 跳过名称已匹配的文件夹,避免无效操作
- 未找到
.3ds文件的文件夹会给出提示
批处理 实现方法(仅兼容简单场景)
如果你的文件夹和.3ds文件名都是纯数字/英文、无空格或特殊符号,可以用批处理:
- 在目标根目录新建文本文件,粘贴以下代码后保存为
rename_folders.bat
@echo off setlocal enabledelayedexpansion :: 遍历所有子文件夹 for /d %%d in (*) do ( cd "%%d" :: 查找当前文件夹内第一个.3ds文件 for %%f in (*.3ds) do ( set "newName=%%~nf" cd .. :: 仅当名称不同时执行重命名 if not "!newName!"=="%%~nd" ( ren "%%d" "!newName!" echo 已重命名:%%d → !newName! ) :: 跳出内层循环,确保只取第一个.3ds文件 goto next_folder ) echo 警告:文件夹 %%d 中无.3ds文件 :next_folder cd .. ) endlocal pause
注意:批处理对包含空格、中文、特殊符号的文件名/文件夹名支持不佳,容易出现重命名失败或逻辑错误,因此仅作备选。
内容的提问来源于stack exchange,提问作者Gibble
相关产品推荐
相关产品推荐

