2014-09-22 4 views
0

У меня есть файл свойств (server.properties), и это выглядит следующим образом:Пакетный скрипт для редактирования .properties файл

IPAddress = 10.xxx
имя_сервера = SomeName

и много других значений ,

Предположим, что он находится на C: \ Server \ server.properties
Есть ли способ изменить значения с помощью пакетного сценария.

Что делать, если я хочу изменить имя_сервера от "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

ответ

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, чтобы фактически переместить файлы. Append >nul для подавления сообщений отчета (например, 1 file moved)

Указанный выше метод преднамеренно создает новый файл, позволяющий просматривать новую версию без ущерба для оригинала.

Обратите внимание, что при создании новой версии эта версия удалит любые пустые строки из файла. При необходимости это можно преодолеть.

Чтобы запустить эту процедуру, используйте

thisbatchname «замещающий текст»

Если текст замены одной строки без пробелов и других разделителей (как кажется вероятным), то кавычки могут быть опущены.


код фиксированный - был delims==" в for /f...%%a... линии, это должно быть delims= (один =.) Двойной = правильно в for /f ... %%g... линии.

Чтобы заменить файл, активируйте команду move в соответствии с инструкцией, заменив ECHO(MOVE на MOVE - после того, как вы подтвердите, что процедура работает правильно. Как вы видели, одна небольшая ошибка и ущерб могут быть сделаны - сохранены двухступенчатой ​​операцией.

+0

Этот код удаляет другие переменные в файле. servername обновляется, но если у меня есть «ip = 1.1.1.1», добавочный к имени сервера, он превращается в «ip =» – ecthelion84

+0

. Также мне нужно изменить оригинал вместо создания копии. – ecthelion84