2012-05-17 3 views
0

배치 파일에서이 코드를 시도했지만 작동하지 않습니다. DefaultGateway.txt의 첫 번째 줄을 가져 와서 NewFile.txt의 세 번째 줄 IP 주소를 바꾸기를 원했습니다.배치 파일에서 특정 줄을 복사 할 수 없습니다.

배치 파일 코드 :

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 루프로 파일을 읽습니다. 결과를 확인하십시오. 그들이 원하는 것입니까? 둘째, "NewFile.txt의 3 번째 줄 IP 주소 바꾸기"*, 파일 끝에 줄을 추가하면 원하는 것입니까? 어쩌면 거기에 또 다른 전략이 필요할 수도 있습니다. –

답변

1

귀하 question/example은 몇 가지 세부 사항을 놓쳤으므로 몇 가지 가정을했습니다. 배치 파일 아래 :

1- DefaultGateway.txt를 전혀 만들지 않지만 동일한 출력을 가져옵니다.

2 출력에서 ​​첫 번째 행을 읽고 콜론 다음에 나오는 텍스트를 ipAddr로 가져옵니다.

3 NewFile.txt의 세 번째 줄을 읽고 //와 /를 이전 ipAddr로 바꾸십시오. 결과는 NewFile.new 파일에 있습니다.

편집 : 당신은 교체해야

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 

참고 : 나는 몇 가지 문제 ...

@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 

프로그램이 위의 데이터를 실행할 때 결과이를 새입니다 고정 FOR 명령의 DefaultGateway.txt 파일의 오른쪽 (전체 경로) 이름 이 이름에 오른쪽 괄호 (예 : (x86))가 포함되어 있으면이 방법으로 캐럿 문자로 이스케이프해야합니다 ( (x86^)). 왜이 파일을 현재 디렉토리에 만드시겠습니까? 그것은 단지 보조 파일 인 것 같습니다.

또 다른 가능성은이 장소에 'ipconfig /all | findstr' 명령을 넣는 것입니다. 따라서 보조 프로그램 파일은 완전히 피할 수 있습니다 (프로그램의 첫 번째 버전에서했던 것처럼).

+0

도와 주셔서 감사합니다. 그러나 그것은 효과가 없습니다. NewFile.txt의 동일한 내용을 NewFile.new에 복사합니다. 출력에서 첫 번째 행을 가져 오지 않으며 이전 ipAddr을 대체하지 않습니다. – hafez

+0

죄송합니다. 첫 번째 프로그램에 몇 가지 사소한 오류가 있었는데 ... 나는 그것을 고쳤습니다. – Aacini

+0

안녕하세요, 고마워요! 그것은 작동합니다! – hafez