2014-09-22 78 views
0

我有一個屬性文件(server.properties),它看起來像這樣:批處理腳本修改的.properties文件

ip地址= 10.xxx
SERVERNAME = someName

和許多其他值。

假設它位於C:\ Server \ server.properties
有沒有辦法使用批處理腳本修改值。

如果我想將serverName從「someName」更改爲「myName」,我該怎麼辦? 我不能使用行號,因爲它可以隨時更改。

這不是How can you find and replace text in a file using the Windows command-line environment?

我試圖找出如何更換屬性的值重複。不要用另一個詞代替一個詞。

謝謝。

+0

這不是http://stackoverflow.com/questions/60034/how-can-you-find-and-replace-text-in-a-file-using-the-windows-command-line的副本-envir – ecthelion84 2014-09-29 17:41:32

回答

0
@ECHO OFF 
SETLOCAL 
SET "sourcedir=C:\106x" 
(
FOR /f "usebackqdelims=" %%a IN ("%sourcedir%\q25967146.txt") DO (
    FOR /f "tokens=1*delims==" %%g IN ("%%a") DO (
    IF /i "%%g"=="servername" (ECHO(%%g=%~1 
    ) ELSE (ECHO(%%a) 
) 
) 
)>newfile.txt 
:: newfile.txt now contains a modified version. 
:: This line will overwrite the original 

ECHO(MOVE /y newfile.txt "%sourcedir%\q25967146.txt" 

GOTO :EOF 

您需要更改sourcedir的設置以適合您的情況。

我用了一個名爲q25967146.txt的文件來存放我的測試數據。更改名稱以適合自己。

可生產newfile.txt

所需MOVE命令僅僅是ECHO編用於測試目的。 確認命令正確後,將ECHO(MOVE更改爲MOVE以實際移動文件。追加>nul以抑制報告消息(例如,1 file moved

上面顯示的方法故意創建一個新文件,以便可以在不損壞原始文件的情況下查看新版本。

請注意,此版本將在創建新版本時刪除文件中的所有空行。如果需要,這可以被克服。

要運行這個程序,使用

然後引號可以省略thisbatchname「替換文本」

如果更換文字無需空格或其他分隔一個字符串(似乎可能)。


代碼固定 - 有在for /f...%%a...線是一個delims==",這應該是delims=(一個=。)雙=處於for /f ... %%g...線正確。

要替換文件,請按照ECHO(MOVE替換爲MOVE的指示激活move - 一旦您驗證過程正常運行。正如你所看到的,一個小小的錯誤和損害本來可以完成 - 通過兩步操作保存。

+0

該代碼刪除文件中的其他變量。服務器名稱得到更新,但如果我有一個「IP = 1.1.1.1」附加到服務器名稱,它會變成「IP =」 – ecthelion84 2014-09-22 22:56:04

+0

另外我需要修改原件而不是複製副本。 – ecthelion84 2014-09-22 22:58:47