我需要一点帮助
我有一个无法制作的脚本,我确实尝试过以不同的方式重写它
这是我的脚本
@echo off
set "replace="code1": ,"
set "replaced="code1": 99999999,"
set "source=File.txt"
set "target=result.txt"
setlocal enableDelayedExpansion
(
for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %source%') do (
set "line=%%b"
if defined line set "line=!line:%replace%=%replaced%!"
echo(!line!
)
) > %target%
endlocal
我有一个 12KB 大小的文本档案,里面有我想用其他资料替换的代码
我的目标是一个可以用新行替换整行的脚本 我有很多代码,所以我需要帮助才能读取输入的每个代码,我拥有的代码数量是未知的 我
在这里构建的代码是我的例子
file.txt
---content inside the file
"code1": 123456789,
"code2": 123123123,
"code3": 456456456,
New Codes to replace old codes
"code1": 9999999,
"code2": 9999999,
"code3": 9999999,
是否可以制作这样的脚本请注意这个较低的脚本只是一个例子
@echo off
set "source=File.txt"
set "target=result.txt"
setlocal enableDelayedExpansion
(
for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %source%') do (
set "line=%%b"
if defined line set "line=!line:%replace%=%replaced%!"
echo(!line!
set "find=" - if the script can find "code1": and replace it with New "code1":
"code1":
"code2":
"code3":
set "replace="
"code1": 99999999,
"code2": 99999999,
"code3": 99999999,
)
) > %target%
endlocal
我已经制作了 5 个其他脚本,但我无法用它来替换整行
我还想洗掉 %target% 并让它编辑当前的 file.txt
我有一个想法这样做
) > %target% to ) >> %source%
不确定是否需要其他任何东西来洗掉目标
Any help will be great
uj5u.com热心网友回复:
根据我的理解,以下脚本应该执行您想要的操作:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "_FILE=%~dp0file.txt" & rem // (path to file to be edited; `%~dp0` is script parent)
set "_CODE=%~dp0code.txt" & rem // (path to file containing new codes to become applied)
set "_TMPF=%~dp0file.tmp" & rem // (path to temporary file)
rem // Write to temporary file:
> "%_TMPF%" (
rem // Loop through lines of file, each one preceded with line number plus `:`:
for /F "delims=" %%L in ('findstr /N "^" "%_FILE%"') do (
rem // Store current line (including line number prefix):
set "LINE=%%L"
rem // Try to extract text portion between prefix and next `:`:
for /F "tokens=2 delims=:" %%K in ("%%L") do (
rem // Check whether text portion is `"` plus anything plus `"`:
cmd /V /D /C echo(!LINE:*:^=!| findstr "^\"[^^^":][^^^":]*\"" > nul && (
rem // Text portion complies with pattern, hence store such:
set "CODE=%%K"
rem // Toggle delayed expansion to avoid troubles with `!` and `^`:
setlocal EnableDelayedExpansion
rem // Escape `findstr` meta-characters `\` and `"` by `\\` and `\"`:
for %%J in ("\" ""^") do set "CODE=!CODE:%%~J=\%%~J!"
rem // Return line beginning with same text portion from other file:
findstr /B /C:"!CODE!:" "!_CODE!"
endlocal
) || (
rem // Text portion does not comply, hence return original line:
setlocal EnableDelayedExpansion
echo(!LINE:*:=!
endlocal
)
)
)
)
rem // Replace original file:
move /Y "%_TMPF%" "%_FILE%"
endlocal
exit /B
您需要在脚本顶部指定一些档案路径:
变量
_FILE
必须指向包含原始代码的档案:变量
_CODE
必须指向包含要使用的新代码的档案:变量
_TMPF
只是指向一个临时档案;
uj5u.com热心网友回复:
可悲的是,我们不知道该档案的确切外观,但这应该可以作业:
@echo off
set "source=File.txt"
set "target=result.txt"
setlocal enableDelayedExpansion
(
for /F "tokens=1,2,* delims=:" %%a in ('findstr /N "^" "%source%"') do (
echo %%b|findstr /b "\"code1\" \"code3\"" >nul && (
echo %%b: 999999999,
) || (
if "%%c" == "" (echo(%%b) else echo %%b:%%c
)
)
)> "%target%"
endlocal
type "%target%"
REM move /y "%source%" "%target%"
只需将您的 15 个代码放入findstr /b
搜索掩码中。
注意:这应该适用于您的 15 个代码,但搜索findstr
模式是有限的,因此当代码太多(或太长)时,您可能会遇到问题。
0 评论