从文本文件中读取字符串,并使用批处理文件将其复制到另一个文本文件中

时间:2013-05-08 14:32:55

标签: batch-file cmd ping

我想要做的基本上是读取包含ping结果的文本文件,检测某个字符串并将其复制到另一个文本文件中。我要复制的字符串是示例中的粗体。

  

Envoi d'une requte'ping'Sur star.c10r.facebook.com [31.13.81.17]   avec 32 octets de donn,esÿ:   R,sponsede31.13.81.17ÿ:八位字节= 32个温度= 77毫秒TTL = 240

     

Statistiques Ping pour 31.13.81.17:       Paquetsÿ:envoy,= 1,re‡us = 1,perdus = 0(perte 0%),   Dur,e近似des boucles en millisecondes:       最小值= 77ms,最大值= 77ms,Moyenne = 77ms

我尝试执行此程序,但变量“resultat”不会出现在结果中。

@echo off
setlocal enabledelayedexpansion

set OUTPUT_FILE=result.txt
>nul copy nul %OUTPUT_FILE%

for /f %%i in (testservers.txt) do (
  set SERVER_ADDRESS=ADDRESS N/A
  for /f "tokens=1,2,3,4" %%a in ('ping -n 1 %%i ^&^& echo SERVER_IS_UP') do (
       if %%a==R,ponse set resultat="%%b %%c %%d"
        )

   echo %%i [!SERVER_ADDRESS::=!] is resultat >>%OUTPUT_FILE%
)

谢谢。

感谢@Matt的帮助,我可以编辑我的代码:

@echo off
setlocal enabledelayedexpansion

set OUTPUT_FILE=result.txt

for /f %%i in (testservers.txt) do (
  if not exist %OUTPUT_FILE% type NUL>%OUTPUT_FILE%
  for /f "tokens=2 delims=:" %%a in ('ping -n 1 %%i ^| find "TTL="') do (
   if errorlevel 0  set resultat=UP: %%a 
  )

  echo %%i is !resultat! >> %OUTPUT_FILE%
  set resultat=DOWN
)

我将“resultat”的默认值设置为DOWN,因为我注意到只有找到“TTL”才会改变,这意味着服务器是UP。如果未找到,程序将显示默认值“resultat”,即DOWN。 “八位字节= 32个temps = 77毫秒TTL = 240 ”部分只会在服务器显示为id时显示,以显示统计信息。结果是这样的:

  

www.google.com已启用:八位位组= 32个临时= 470毫秒TTL = 42

     

www.facebook.com UP:八位字节= 32个temps = 326 ms TTL = 241
  192.168.1.15是UP:八位字节= 32个温度< 1ms TTL = 128
  10.21.107.90已关闭

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我在这看到一些问题。在说SERVER_IS_UP之前,您实际上没有检查ping的返回以查看它是否有效。您没有正确使用SERVER_ADDRESS变量,并且您没有将结果作为变量调用。

看看这是否修复了它。

@echo off
setlocal enabledelayedexpansion

set OUTPUT_FILE=result.txt

for /f %%i in (testservers.txt) do (
  if not exist %OUTPUT_FILE% type NUL>%OUTPUT_FILE%
  set SERVER_ADDRESS=ADDRESS N/A
  for /f "tokens=2 delims=:" %%a in ('ping -n 1 %%i ^| find "TTL="') do (
   if errorlevel 0 echo %%1 is up && set resultat=%%a
   if errorlevel 1 echo %%i is down && set resultat=%%a is down
  )

  echo %%i [!SERVER_ADDRESS!::=] is !resultat! >>%OUTPUT_FILE%
  set resultat=