2012-05-21 163 views
0

特定行我有一个批处理文件,我需要一个变量写入一个文本文件中的特定行,并覆盖什么是在该行的所有准备。我有代码从文件读取特定的行,也许我可以切换它也写?编写批处理变量到一个文本文件中

读行代码:

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! 

我试图添加回声%variable1% > !v4!类似的东西,但它不工作。

回答

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 
+0

搞清楚这件事!不知道为什么它没有为整个循环的单个重定向工作,但无论如何都做得很好。 –

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 
+0

我不知道你在做什么,在此我只想一个批处理文件来改变已存在的文本文件中的特定行。说文本文件的第5行说你好。我想批量采取一个变量,并写上第5行的变量内容。就这样。 –

+0

你的意思是''variables.txt'不是需要替换行的文件吗? –

+0

这是......但我不想创建一个新文件。我看到你在做什么,但我觉得必须有比创建一个新的文件其他更好的办法:/ –

1

另一个选择可能是完全覆盖文件。以下是要做的部分:

: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 
… 

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

相关问题