2013-12-02 3 views
0

У меня есть локальный сервер в моей виртуальной коробке Windows XP.найти слово и заменить строку командным файлом

Каждый раз, когда меняется моя основная сеть, например, от wifi до кабеля или я перехожу в другую сеть, IP-адрес моего окна Win XP изменяется.

Я хочу, чтобы запустить пакетный файл, чтобы отобразить новый IP к некоторому общему имени в мой файл хостов

C:\WINDOWS\system32\drivers\etc\hosts

, например, если у меня сейчас:

10.97.100.74 www.myAppServer.com

и если ip изменяется на 192.168.11.9, Я хочу найти строку myAppServer в файле hosts и заменить всю строку на

192.168.11.9 www.myAppServer.com

Я был в состоянии получить текущий IP-адрес с помощью:

for /f "skip=1 delims={}, " %%A in ('wmic nicconfig get ipaddress') do for /f "tokens=1" %%B in ("%%~A") do set "IP=%%~B" 

set IP=%IP% 

, но как я могу найти эту строку и заменить его?

ответ

0

Я нашел это на DOS Tips

BatchSubstitute - разбирает строку файла строкой и заменяет подстроку

@echo off 
REM -- Prepare the Command Processor -- 
SETLOCAL ENABLEEXTENSIONS 
SETLOCAL DISABLEDELAYEDEXPANSION 

::BatchSubstitute - parses a File line by line and replaces a substring 
::syntax: BatchSubstitute.bat OldStr NewStr File 
::   OldStr [in] - string to be replaced 
::   NewStr [in] - string to replace with 
::   File [in] - file to be parsed 
::$changed 20100115 
::$source http://www.dostips.com 
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF 
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
    set "line=%%B" 
    if defined line (
     call set "line=echo.%%line:%~1=%~2%%" 
     for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X 
    ) ELSE echo. 
) 
+0

Я хочу заменить многословную строку специальными символами, присутствующими в том, что моя строка - это «узел»% ~ dp0 \ .. \ mocha \ bin \ mocha "% * '. Мне нужно изменить это на «my_path»% ~ dp0 \ .. \ mocha \ bin \ mocha "% * 'Так как я могу это сделать, используя вышеприведенный скрипт. –

+0

@EswaraReddy Вы должны задать новый вопрос со всеми подробностями того, что вы пробовали (ссылаясь на этот, если вы его попробовали) и всеми результатами. –

0

Если вы хотите заменить только одна линия, вы можете это сделать это путь:

@echo off 
setlocal 

cd "C:\WINDOWS\system32\drivers\etc" 
for /F "delims=:" %%a in ('findstr /N "myAppServer" hosts') do set lineNum=%%a 
(for /F "tokens=1* delims=:" %%a in ('findstr /N "^" hosts') do (
    if %%a equ %lineNum% (
     echo 192.168.11.9 www.myAppServer.com 
    ) else (
     echo %%a 
    ) 
)) > hosts.new 

Эта программа исключает пустые строки и будут иметь проблемы, если файл hosts содержит специальные символы партии, такие как | > < & !. При необходимости эти детали могут быть исправлены.

0

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

Если у Вас есть свой IP-адрес в% IP%, то

set "hostsFile=%systemroot%\system32\drivers\etc\hosts" 
(
    findstr /v /i /c:"www.MyAppServer.com" "%hostsFile%" 
    echo(
    echo %IP% www.MyAppServer.com 
) > "%temp%\hosts" 

move /y "%temp%\hosts" "%hostsFile%" >nul 2>nul 

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

+0

Право, это то, что я, наконец, заканчиваю донгом, как показано на моем ответе внизу. Будет ли способ для меня сделать то же самое на ОС хоста, [Windows, OS X, Linux, ..] на mac 'ifconfig' не покажет мне ip виртуальных ящиков. – shebelaw

0

это получить работу, наконец:

@echo off 
REM Set a variable for the Windows hosts file location 
set "hostpath=%systemroot%\system32\drivers\etc" 
REM set "hostpath=C:\projectStar\Programs\etc" 
set "hostfile=hosts" 

REM Make the hosts file writable 
attrib -r -s -h "%hostpath%\%hostfile%" 

for /f "skip=1 delims={}, " %%A in ('wmic nicconfig get ipaddress') do for /f "tokens=1" %%B in ("%%~A") do set "IP=%%~B" 
REM echo %IP% 
set IP=%IP% 

move /y "%hostpath%\%hostfile%" "Hs.txt" 
findstr /v/c:"www.nexsoftnetwork.com" Hs.txt > "Hss2.txt" 
echo %IP% www.nexsoftnetwork.com >>"Hss2.txt" 

move /y "Hss2.txt" "%hostpath%\%hostfile%" 

echo Done. 
pause 

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

Смежные вопросы