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 命令解析信息,而不是将所有输出发送到文件,然后读取和解析文件。您确定只需要解析文件第一行内容的帮助吗? 默认情况下,文本行通过TABSPACE 的默认分隔符分为TOKENS。您可以使用TOKENSDELIMS 选项来控制要使用的标记和分隔符。因此,在您的情况下,您希望 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" &amp; set "item=%WhoIs: =" &amp; set /A "n-=1" &amp; (if !n! equ 0 set "out=!item!") &amp; 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 循环和建议的主要内容,如果未能解决你的问题,请参考以下文章

改进 PHP 'for' 循环

为什么阿里巴巴不建议在for循环中使用"+"进行字符串拼接

为啥v-if和v-for不建议同时使用

编写高质量代码改善C#程序的157个建议——建议18:foreach不能代替for

通过for循环在nodejs中构造数组

关于带按钮的模板字符串循环的建议