如何用Batch脚本编辑TXT文件中的无前置标识数字
如何用Batch脚本定位并修改TXT文件中无前置标识的数字
我尝试用Batch脚本编辑TXT文件,但目标数字(如示例中的58)没有前置标识,难以定位修改。
现有Batch脚本片段
@ECHO Off setlocal ENABLEDELAYEDEXPANSION cd /d "%~dp0" set "Mfind= %Random%" @For %%G In ("%~dp03Ready\NSB") Do Set "sourcedir=%%~fG" @For %%G In ("%~dp03Ready\NSBEdited") Do Set "destdir=%%~fG" Set /p "FPats=Enter Your Amount: FOR /f "dedestination directory SET "newdest=%%~dpq" SET "newdest=!newdest:%sourcedir%=%destdir%!" SET "newdest=!newdest:~0,-1!" MD "!newdest!" 2>nul ( for /F "tokens=1* delims=:" %%a in ('findstr /N "^" "%%q"') do ( set "line=%%b" if defined line IF "%%b" neq ) )>"!newdest!\%%~nxq" ) GOTO :NSBEditing :nidC1 SET "line=%line:-=%" SET "original=line%" goto nidC1 set "line=!line:%Mfind%=%Mfind%%FPats%!" GOTO :eof
目标TXT文件部分内容
"upnn": 0, "upfb": true, "upcu": { "adi "isnc": false, "erpm": 0 } }, 58, < ---------------- 尝试修改此类数字 { "upma":ue, "upcu": { "adid": "lphaSixoSSC "adtc": [ { "kfti": 1000.0, "kfva": 0.321 }
修复后的解决方案脚本
先修正原脚本的语法错误,再添加定位无标识数字行的逻辑。目标数字行的特征是仅包含数字和可选逗号,且不含JSON格式的引号、冒号等字符,以下是完整可运行的脚本:
@ECHO Off setlocal ENABLEDELAYEDEXPANSION cd /d "%~dp0" @For %%G In ("%~dp03Ready\NSB") Do Set "sourcedir=%%~fG" @For %%G In ("%~dp03Ready\NSBEdited") Do Set "destdir=%%~fG" Set /p "FPats=Enter Your Amount: " REM 遍历源目录下所有文件 FOR /f "delims=" %%q in ('dir /b /s "%sourcedir%\*"') do ( REM 构建目标目录路径 SET "newdest=%%~dpq" SET "newdest=!newdest:%sourcedir%=%destdir%!" REM 创建目标目录(忽略已存在的错误) MD "!newdest!" 2>nul REM 处理每一行内容 ( for /F "tokens=1* delims=:" %%a in ('findstr /N "^" "%%q"') do ( set "line=%%b" if defined line ( REM 判断当前行是否为仅含数字和逗号的目标行 echo !line! | findstr /r "^[0-9][0-9]*,?$" >nul if !errorlevel! equ 0 ( REM 替换为输入数值,保留末尾逗号格式 if "!line:~-1!" equ "," ( echo !FPats!, ) else ( echo !FPats! ) ) else ( REM 非目标行直接输出原内容 echo !line! ) ) else ( REM 空行直接输出 echo. ) ) )>"!newdest!\%%~nxq" ) GOTO :eof
关键逻辑说明
- 目标行定位:用
findstr /r "^[0-9][0-9]*,?$"匹配以数字开头、可选结尾带逗号的行,精准锁定无前置标识的数字行。 - 目录同步:自动将源文件复制到目标目录修改,避免破坏源文件。
- 格式保留:根据原行是否带逗号,保持输出格式一致。
内容的提问来源于stack exchange,提问作者JR Santos
相关产品推荐
相关产品推荐

