For 循环和建议
Posted
技术标签:
【中文标题】For 循环和建议【英文标题】:For loops and advice 【发布时间】:2021-12-03 23:17:24 【问题描述】:我知道这已经被问了一百万次,但我就是不明白。
我在一个文本文件中有以下行:
Pinging ERL-DFEIST03.XXXXXX.com [127.0.0.1] with 32 bytes of data:
这是第一行。
我需要第二部分。 ERL-DFEIST03.XXXXXX.com
我在网上找到了一个可以让我获得第一个单词的代码,但无论我做什么,我都无法获得第二个单词或理解为什么我不能。
有人可以告诉我如何修复代码吗?
@echo off
for /f %%b in (c:\Temp\IP_temp.txt) do (
echo %%b
pause
exit /b
)
【问题讨论】:
您可以直接从ping
命令解析信息,而不是将所有输出发送到文件,然后读取和解析文件。您确定只需要解析文件第一行内容的帮助吗?
默认情况下,文本行通过TAB
和SPACE
的默认分隔符分为TOKENS
。您可以使用TOKENS
和DELIMS
选项来控制要使用的标记和分隔符。因此,在您的情况下,您希望 TOKEN
数字 2 以空格作为分隔符。由于默认分隔符是空格,因此您无需使用 DELIMS
选项执行任何操作。
for /F "tokens=2" %%I in ('ping …') do echo/%%I& goto :NEXT
,然后是:NEXT
我下一行...
我刚刚意识到,在正常情况下,您要查找的结果不仅是 ping
命令的第二行输出,而不是第一行,而且它也是ping 您要查找的字符串的结果。例如,如果您是ping ***.com
,那么您的结果将如下所示:Pinging ***.com [151.101.193.69] with 32 bytes of data:
。如果您还不知道域名,例如ping 151.101.193.69
,那么您的结果将如下所示:Pinging 151.101.193.69 with 32 bytes of data:
。那么为什么需要捕获输入的字符串呢?
【参考方案1】:
只是为了进一步混淆您,您可以做您当前需要/询问的问题,而根本不需要 for
循环!
@Set /P "WhoIs=" 0< "C:\Temp\IP_temp.txt"
@Set "WhoIs=%WhoIs: [="&:"%"
@Echo(%WhoIs:* =%
@Pause
【讨论】:
尝试set "n=2" & set "item=%WhoIs: =" & set /A "n-=1" & (if !n! equ 0 set "out=!item!") & set "item=%"
将空格分隔的所需项目的编号放入n
。结果在out
我认为@Aacini 没有任何好处,(除了会引起更大程度的混乱)。我不打算将空格字符作为分隔符进行拆分,否则我刚刚发布了一个 for
循环并且我不愿意这样做,因为它可以通过阅读它们的特定命令的使用信息来解决使用。这个想法是,不管域字符串中是否可以存在空格,将所有内容从初始空格直到第一个方括号之前的空格隔离开来。如果域字符串有space[
,我的失败;如果它有 space
,则属于你的。
是的。也许在这种情况下,我的方法没有任何优势,但它允许基于 substrings 来分隔项目,而不仅仅是像 for /F
这样的字符
TBF @Aacini,我不保证ping.exe
的输出也永远不会包含多个相邻空格!
@doheth,请创建一个文本文件,第一行为Pinging ERL-DFEIST03.XXXXXX.com [127.0.0.1] with 32 bytes of data:
,将文件命名为IP_temp.txt
,并将其放在C:\
中名为Temp
的目录中。然后运行我的代码,看看输出什么。如果代码返回ERL-DFEIST03.XXXXXX.com
,请接受我的解决方案,因为它回答了您提出的问题。请不要无礼,忽略其他人为帮助您而付出的时间和精力,删除某人已经回答的问题,特别是如果它完全符合要求。谢谢。以上是关于For 循环和建议的主要内容,如果未能解决你的问题,请参考以下文章