批处理文件无法复制特定行

时间:2012-05-17 06:05:04

标签: batch-file

我在批处理文件中尝试了这段代码,但它无法正常工作。  我想从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

1 个答案:

答案 0 :(得分:1)

你的问题/例子遗漏了几个细节,所以我做了一些假设。批处理文件如下:

1-根本不创建DefaultGateway.txt,但采用相同的输出。

2-从该输出读取第一行,并将冒号后面的文本作为ipAddr。

3-阅读NewFile.txt的第三行,并将//和/之间的文本替换为之前的ipAddr。结果在NewFile.new文件中。

编辑:我解决了几个问题......

@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

请注意,您必须在FOR命令中替换DefaultGateway.txt文件的正确(完整路径)名称。如果此名称包含正确的括号,例如(x86),则必须使用插入符号以这种方式对其进行转义:(x86^)。为什么不在当前目录中创建此文件?它似乎只是一个辅助文件,对吗?

另一种可能性是将'ipconfig /all | findstr'命令放在这个位置,这样就完全避免了辅助文件(就像我在程序的第一个版本中所做的那样)。