0

在课堂上无聊试图弄清楚这一点。

在 Windows 命令提示符下:

ipconfig /all返回所有的环回、隧道等。

如果我运行ipconfig /all | find /n "Internal"它将返回 [11] 以太网适配器内部。我想要做的是将 11 从开头插入字符串,然后将其通过管道传输到其他内容,这将允许我返回第 11-19 行或其他内容。您可以在类似于 jquery 和链接的单行中执行此操作吗?

4

1 回答 1

0

使用 FOR /F 循环解析出 11 很简单。但是在命令行中使用该值是困难的。

这是我能想到的从命令行运行的最好的方法。

set "stop="&for /f "delims=[]" %N in ('ipconfig /all^|find /n "Internal"') do @for /f "tokens=1* delims=:" %A in ('ipconfig /all^|findstr /n "^"') do @if %A geq %N if not defined stop echo(%B&>nul 2>nul set /a 1/(%A-%N-8)||set stop=1

我能想到的最短的一个班轮使用了不同的策略。

set n=&for /f "delims=" %A in ('ipconfig/all') do @if defined n (set/a"1/n,n-=1">nul 2>&1&&echo %A) else echo %A|find "Internal"&&set n=8

但上述解决方案忽略了空行。

如果要保留空白行,则以下工作:

set n=&for /f "tokens=1* delims=:" %A in ('ipconfig/all^|findstr/n "^"') do @if defined n (set/a"1/n,n-=1">nul 2>&1&&echo(%B) else echo %B|find "Internal"&&set n=8

编辑

我稍微缩短和简化了第二和第三解决方案的逻辑。

我将尝试解释第二个选项:

我首先明确地取消定义一个计数器,然后使用 FOR 来读取 IPCONFIG/ALL 命令的输出。现在开始 DO 子句中有趣的部分。

起初,计数器未定义,因此执行 ELSE 子句。我将当前行通过管道传输到 FIND 以查找“内部”。如果未找到该字符串,则不会发生任何事情,我们会进入下一行。但如果找到,则打印该行。&&然后在找到字符串后执行之后的代码。在那里我将计数器设置为 8,因为我们想要打印接下来的 8 行。

计数器是为其余的行定义的,所以我们现在切换到 IF 语句的第一部分。我使用 SET /A 来做一些数学运算。首先,我将 1 除以计数器的当前值。如果计数器为 0,则引发错误并忽略语句的其余部分。如果计数器不为 0,那么接下来我将计数器减 1。我将 stdout 和 stderr 都重定向到 nul,因为我们不想看到来自 SET /A 命令的任何消息。如果 SET 命令成功,那么我会回显该行。由于我最初在找到字符串时将计数器设置为 8,因此在计数器达到 0 之前将打印多达 8 行。

于 2012-08-13T17:51:21.820 回答