批处理脚本修改的.properties文件

批处理脚本修改的.properties文件

问题描述:

我有一个属性文件(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

@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