2012-05-17 4 views
0

Я пробовал этот код в пакетном файле, но он не мог работать. Я хотел взять первую строку из файла DefaultGateway.txt и заменить ip-адрес третьей строки в файле NewFile.txt.Пакетный файл не смог скопировать определенную строку

Batch Codes Файл:

ipconfig /all | findstr Gateway > "C:\Program Files (x86)\""Wireless Guard\""DefaultGateway.txt" 
SetLocal EnableDelayedExpansion 
type nul > NewFile.txt 
set "Default" =Start Line of Paragraph 
set "254"=End Line which is not Included 
set Flag=0 
for /f "tokens=* delims=" %%a in ('type DefaultGateway.txt') do (
if /i "%StartText%" EQU "%%a" (set Flag=1) 
if /i "%EndText%" EQU "%%a" (set Flag=0) 
if !Flag! EQU 1 echo %%a >> NewFile.txt 
) 

DefaultGateway.txt:

Default Gateway . . . . . . . . . : 172.20.128.254 
Default Gateway . . . . . . . . . : 
Default Gateway . . . . . . . . . : 

NewFile.txt:

remarks:This document is for Linksys for version v4.30.5, the auto sensing part. 
"C:\Program Files (x86)\Wireless Guard\wget" --http-user= --http-password=admin 
[this is not a link]http://192.168.1.1/WClientMACList.htm 
REM del WClientMACList.txt 
REM del arp.txt 
REM del Intruder1.txt 
copy WClientMACList.htm WClientMACList.txt 
del WClientMACList.htm 
REM del WL_ActiveTable.asp 
REM do ping for 20 seconds 
REM ping -n localhos 
+0

Во-первых: * «Я хотел взять первую строку из DefaultGateway.txt» *, прочитал файл с циклом FOR. Проверьте результаты. Это то, что вы хотите? Во-вторых, * «заменить ip-адрес третьей строки в NewFile.txt» *, вы добавляете строку в конце файла, это то, что вы хотите? может быть, вам нужна другая стратегия. –

ответ

1

Ваш вопрос/пример пропустили несколько деталей, поэтому я сделал некоторые предположения. Пакетный файл Ниже:

1- Не создает файл DefaultGateway.txt вообще, но принимает тот же результат.

2- Прочитайте первую строку с этого вывода и получите текст после двоеточия как ipAddr.

3- Читайте третью строку файла NewFile.txt и заменяйте текст между // и/предыдущим ipAddr. Результат - в файле NewFile.new.

EDIT: Я установил пару проблем ...

@echo off 
setlocal EnableDelayedExpansion 
REM ipconfig /all | findstr Gateway > "C:\Program Files (x86)\""Wireless Guard\""DefaultGateway.txt" 
for /F "tokens=2 delims=:" %%a in (DefaultGateway.txt) do (
    set ipAddr=%%a 
    goto continue 
) 
:continue 
set num=0 
(
for /F "delims=" %%a in (NewFile.txt) do (
    set "line=%%a" 
    set /A num+=1 
    if !num! equ 3 (
     for /F "tokens=1-3 delims=/" %%b in ("%%a") do (
     set "line=%%b//%ipAddr:~1%/%%d" 
    ) 
    ) 
    echo(!line! 
) 
) > NewFile.new 

Это результирующее NewFile, когда программа запускается с вашими данными выше:

remarks:This document is for Linksys for version v4.30.5, the auto sensing part. 
"C:\Program Files (x86)\Wireless Guard\wget" --http-user= --http-password=admin 
[this is not a link]http://172.20.128.254/WClientMACList.htm 
REM del WClientMACList.txt 
REM del arp.txt 
REM del Intruder1.txt 
copy WClientMACList.htm WClientMACList.txt 
del WClientMACList.htm 
REM del WL_ActiveTable.asp 
REM do ping for 20 seconds 
REM ping -n localhos 

Обратите внимание, что вы должны заменить right (полный путь) файла DefaultGateway.txt в команде FOR. Если это имя содержит правые круглые скобки, например (x86), вы должны избегать его с символом каретки таким образом: (x86^). Почему бы не создать этот файл в текущем каталоге? Кажется, это всего лишь вспомогательный файл, верно?

Другая возможность заключается в том, чтобы положить в это место команду 'ipconfig /all | findstr', поэтому дополнительный файл полностью исключается (как в первой версии моей программы).

+0

Спасибо за помощь. Но это не работает. Он копирует тот же контент в NewFile.txt в NewFile.new. Он не берет первую строку с выхода и также не заменяет предыдущий ipAddr. – hafez

+0

К сожалению! В моей первой программе было несколько незначительных ошибок ... Я исправил их. – Aacini

+0

Эй, спасибо вам! Оно работает!!! – hafez

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