将批处理变量写入文本文件中的特定行

时间:2012-05-21 13:32:41

标签: text batch-file

我有一个批处理文件,我需要将一个变量写入文本文件的特定行,并覆盖该行中的所有内容。我有从代码中读取特定行的代码,也许我可以将其切换为也可以写入?

阅读行代码:

setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in (variables.txt) do (
set /a N+=1
set v!N!=%%a
)
set variable1=!v1!
set variable2=!v2!
set variable3=!v3!
set variable4=!v4!

我尝试添加类似的echo %variable1% > !v4!,但它不起作用。

3 个答案:

答案 0 :(得分:6)

我想通了!!以下是可能需要它的任何其他人的代码。

@echo off
setlocal enableextensions enabledelayedexpansion

set inputfile=variables.txt

set tempfile=%random%-%random%.tmp

copy /y nul %tempfile%

set line=0

for /f "delims=" %%l in (%inputfile%) do (
    set /a line+=1
    if !line!==4 (
        echo WORDS YOU REPLACE IT WITH>>%tempfile%
    ) else (
        echo %%l>>%tempfile%
    )
)

del %inputfile%
ren %tempfile% %inputfile%

endlocal

答案 1 :(得分:2)

另一种选择可能是完全覆盖该文件。这是要做的部分:

:saveVars
(
ECHO %v1%
ECHO %v2%
ECHO %v3%
ECHO %v4%
ECHO %v5%
) >variables.txt
GOTO :EOF

即,如果行数是固定的并且事先已知。如果没有,您可能希望在示例代码中存储增量的最后一个值,并在保存变量时使用它,如下所示:

:saveVars
SETLOCAL EnableDelayedExpansion
(
  FOR /L %%i IN (1,1,%N%) DO (ECHO !v%%i!)
) >variables.txt
ENDLOCAL
GOTO :EOF

我在这里假设v1 / v2等变量仅用于与文件同步:当读取时,行存储在这些变量中,当任何变量存在时他们(变量)的变化,你只需立即调用saveVars子程序。以下是如何使用它的示例:

…
SET v2=something
CALL :saveVars
…
SET v4=%somevar%
CALL :saveVars
…

如果文件很小,重写应该足够快。

答案 2 :(得分:1)

不完全确定我已经正确理解了所有内容,但如果您想用批处理脚本替换文本文件的现有部分,则需要将所有内容(包括已更改的部分)写入新文件首先,然后删除原始文件并将新文件重命名为原始名称。

我无法真正看到将所有内容都读入变量的观点,除非我遗漏了一些东西。您可以简单地遍历将它们逐个写入新文件的行,并在整个过程中用替换文本替换特定行的内容:

setLocal EnableDelayedExpansion
>newFile.txt (
  for /f "tokens=* delims= " %%a in (variables.txt) do (
    set /a N+=1
    if !N! == 4 (ECHO substitute text) ELSE ECHO %%a
  )
)
del variables.txt
rename newFile.txt variables.txt

如果替代文本必须从其中一行中派生出来,你可以这样做:

setLocal EnableDelayedExpansion
>newFile.txt (
  for /f "tokens=* delims= " %%a in (variables.txt) do (
    set /a N+=1
    if !N! == 1 SET subst_text=%%a
    if !N! == 4 (ECHO !subst_text!) ELSE ECHO %%a
  )
)
del variables.txt
rename newFile.txt variables.txt