如何用Windows命令提示符FOR/DO命令批量替换指定目录DDS文件
批量替换游戏模组地图瓦片DDS文件的自动化方案
需求说明
需要批量处理28439个命名格式为MENU_MapTile_*-tpf-dcx的子文件夹,完成以下操作:
- 从
maptile_file目录复制map_tile_z.dds到每个目标子文件夹 - 将复制后的文件重命名为子文件夹名称去掉
-tpf-dcx后缀后加.dds - 覆盖目标文件夹内原有同名DDS文件
后续需重复执行该操作,优先采用Windows命令提示符的FOR/DO命令实现,也接受其他可行方案。
文件夹与文件结构
71_maptile.tpfbdtmaptile_file(存放用于替换的源文件)• map_tile_z.dds // 待复制的源文件71_maptile-tpfbdt(反编译生成的主文件夹)• MENU_MapTile_M00_L0_00_00_00000000.tpf.dcx • MENU_MapTile_M00_L0_00_00_00000000-tpf-dcx // 目标子文件夹1 • MENU_MapTile_M00_L0_00_00_00000000.dds // 待替换的目标文件 • MENU_MapTile_M00_L0_00_00_00004000.tpf.dcx • MENU_MapTile_M00_L0_00_00_00004000-tpf-dcx // 目标子文件夹2 • MENU_MapTile_M00_L0_00_00_0000000.dds // 待替换的目标文件
CMD FOR/DO命令实现
打开命令提示符,切换到包含71_maptile-tpfbdt的根目录(或直接使用绝对路径),执行以下命令:
@echo off setlocal enabledelayedexpansion :: 递归遍历目标文件夹 for /r "71_maptile-tpfbdt" %%d in (MENU_MapTile_*-tpf-dcx) do ( if exist "%%d" ( :: 提取文件夹名称并移除-tpf-dcx后缀 set "folderName=%%~nd" set "newFileName=!folderName:-tpf-dcx=!.dds" :: 强制复制并重命名文件 copy /y "maptile_file\map_tile_z.dds" "%%d\!newFileName!" ) ) echo 批量替换完成! pause
命令细节说明
for /r "71_maptile-tpfbdt" %%d in (MENU_MapTile_*-tpf-dcx):递归扫描71_maptile-tpfbdt下所有符合命名规则的文件夹setlocal enabledelayedexpansion:启用延迟变量扩展,确保循环内变量修改实时生效%%~nd:获取文件夹的纯名称(不含路径)!folderName:-tpf-dcx=!:替换文件夹名称中的-tpf-dcx为空字符串,生成目标文件名的前缀copy /y:强制覆盖目标文件,无需手动确认
替代方案:PowerShell脚本
若处理大量文件时CMD效率不足,可使用PowerShell脚本,执行速度更快:
# 切换到操作根目录,请替换为实际路径 Set-Location "你的根目录路径" # 递归查找所有目标文件夹 $targetFolders = Get-ChildItem -Recurse -Directory -Filter "MENU_MapTile_*-tpf-dcx" -Path "71_maptile-tpfbdt" $sourceFile = ".\maptile_file\map_tile_z.dds" foreach ($folder in $targetFolders) { # 生成目标文件名 $newFileName = $folder.Name.Replace("-tpf-dcx", "") + ".dds" $targetPath = Join-Path -Path $folder.FullName -ChildPath $newFileName # 强制复制覆盖 Copy-Item -Path $sourceFile -Destination $targetPath -Force } Write-Host "批量替换完成!"
内容的提问来源于stack exchange,提问作者Emma from Mike's party
相关产品推荐
相关产品推荐

