批处理(bat)命令里,怎么打开并修改指定的后缀格式里的内容?

如图所示,我这个代码运行是ok的,但是有个缺点,只能修改并覆盖名称为“a.nc”的文件。实际情况文件名是不确定的,但是格式一定是“.nc”。我自己尝试过加入dir/s/b,但是好像能读取但是无法覆盖掉源文件。所以这段代码应该怎么修改可以达到修改当前目录下".nc"文件内容后覆盖原文件的效果。求大佬帮忙指点一下。

不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起双击运行
----------------------------------------------------
<# :
cls&echo off&cd /d "%~dp0"
rem 将当前目录下nc文件里包含有指定关键字字符的行替换成其他多行内容
set #=Any question&set _=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%_% %z%
set "mainfolder=%cd%"
powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"
echo;%#% +%$%%$%/%_% %z%
pause
exit
#>
$path=get-item -liter $env:mainfolder;
$enc=[Text.Encoding]::GetEncoding('GB2312');
$files=@(dir -liter $path.FullName -recurse|?{('.nc' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
for($i=0;$i -lt $files.length;$i++){
write-host ($files[$i].FullName.Substring($path.FullName.length));
$f=$false;$text=[IO.File]::ReadAllLines($files[$i].FullName, $enc);
for($j=0;$j -lt $text.count;$j++){
if($text[$j].Contains("[平底]JD-2.00")){
$newline=@("([平底]JD-2.00)","T3 M6","G43H3","M03S18000","M07");
$f=$true;$text[$j]=$newline -join "`r`n";
}
}
if($f){[IO.File]::WriteAllLines($files[$i].FullName, $text, $enc);}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-10-21
@echo off & title 批量修改nc文件(修改版) By 依梦琴瑶

setlocal enabledelayedexpansion

for /f "delims=" %%i in ('dir /a-d/s/b *.nc') do (
(for /f "usebackq delims=" %%a in ("%%~i") do (
set "Str=%%~a"
if "!Str:[平底]JD-2.00=!"=="%%~a" (
echo,%%a
) else (
echo,!([平底]JD-2.00^)
echo,!T3 M6
echo,!G43H3
echo,!M03S18000
echo,!M07
)
))>$
move $ "%%~i"
)本回答被提问者和网友采纳
相似回答