2012-05-21 103 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 
… 

如果文件很小,重寫應該足夠快。

相關問題