如何用批处理或脚本将文件夹内各CFG文件指定内容替换为自身无扩展名文件名
嘿,这个需求完全可以实现!我给你准备了两种常用的脚本方案——Windows批处理和PowerShell,你可以根据自己的习惯选:
Windows 批处理方案
如果习惯用CMD命令行,直接新建一个replace_kof98.bat文件,把下面的代码复制进去,放到你的cfg文件所在文件夹里双击运行就行:
@echo off setlocal enabledelayedexpansion :: 遍历所有.cfg文件 for %%f in (*.cfg) do ( :: 提取无扩展名的文件名 set "filename=%%~nf" set "line_num=0" :: 新建临时文件,逐行处理原文件内容 >"%%~nf_temp.cfg" ( for /f "delims=" %%l in ('type "%%f"') do ( set /a line_num+=1 if !line_num! equ 4 ( :: 第4行替换kof98为文件名 set "current_line=%%l" set "current_line=!current_line:kof98=!filename!" echo !current_line! ) else ( :: 其他行直接输出 echo %%l ) ) ) :: 用临时文件覆盖原文件 move /y "%%~nf_temp.cfg" "%%f" >nul ) echo 所有文件替换完成! pause
批处理方案说明:
setlocal enabledelayedexpansion:开启延迟变量扩展,确保循环里的变量能实时更新%%~nf:自动提取每个cfg文件的无扩展名名称- 先把处理后的内容写入临时文件,再覆盖原文件,避免直接修改时出现文件损坏的问题
PowerShell 方案
如果用PowerShell更顺手,这个方案代码更简洁,兼容性也更好:
新建一个Replace-Kof98.ps1文件,复制下面的代码进去,放到目标文件夹后右键用PowerShell运行:
# 获取当前文件夹下所有.cfg文件 Get-ChildItem -Filter *.cfg | ForEach-Object { $file = $_ $targetName = $file.BaseName # 提取无扩展名文件名 # 读取文件所有行 $content = Get-Content -Path $file.FullName if ($content.Count -ge 4) { # 第4行(数组索引从0开始,所以是[3])替换kof98为目标文件名 $content[3] = $content[3] -replace 'kof98', $targetName # 写回原文件,编码根据你的文件实际情况调整,比如UTF-8 Set-Content -Path $file.FullName -Value $content -Encoding ASCII } else { Write-Warning "⚠️ 文件 $($file.Name) 不足4行,跳过处理" } } Write-Host "✅ 所有符合条件的文件替换完成!" -ForegroundColor Green
PowerShell方案说明:
$file.BaseName:直接获取无扩展名的文件名,比批处理更直观- 加入了文件行数判断,如果某个cfg文件不足4行,会给出警告提示
-replace操作支持正则匹配,这里直接用简单字符串替换就足够
注意事项:
- 建议先备份所有cfg文件再运行脚本,避免意外情况导致数据丢失
- 如果你的cfg文件是UTF-8编码,PowerShell里的
-Encoding ASCII可以改成-Encoding UTF8 - 批处理对特殊字符(比如
&、|)的处理有限,如果你的cfg文件里有这类字符,优先用PowerShell方案
内容的提问来源于stack exchange,提问作者mikty
相关产品推荐
相关产品推荐

