繁体   English   中英

将多行存储在一个变量中

[英]Store multiple lines in a variable

我需要将过滤后的多行 output 保存到单个批处理变量中,但到目前为止没有成功。
我不能在这个精简版的 POS 终端中使用 Powershell 并且使用临时文件是不切实际的,因为操作系统从超慢的 SD 卡运行。

有了这个,我需要一个变量中的以下 output :

C:\Users\medUser> route print | findstr "127 10 192"
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    331

在这种情况下,我需要将这 5 行(但实际上会超过 15 行)捕获为单个变量。
不借助外部工具是否可行?
我知道一些类似thisthisthis的方法,但我无法使其工作。

我已经尝试了下面的解决方案,但不幸的是它只存储了最后一行。

FOR /F "tokens=* USEBACKQ" %F IN (`route print ^| findstr "127\."`) DO (SET var=%F)
ECHO %var%

注意:最终目标是拥有一个大字符串,我可以通过 findstr 多次解析它,而无需一遍又一遍地运行相同的命令。
如果不可行,我也会接受一个变量有一个计数器的解决方案,比如第一行是var1 ,第二行是var2 ,等等。谢谢!

使用中的低效示例代码:

:loop
    SET _ror2="NOK"
    route print | findstr "10\.16\.0\.0.*255\.255\.0\.0.*10\.147\.1\.3" && route print | findstr "192\.168\.47\.0.*255\.255\.255\.0.*192\.168\.46\.3" && route print | findstr "10\.16\.0\.0.*255\.255\.0\.0.*10\.147\.1\.3" && route print | findstr "xxxxx" && route print | findstr "repeat with 15 more conditions to test" && SET _ror2=ok
    if "%_ror2%" == "ok" (
        timeout 20 >NUL
        goto loop
    )

ECHO One of our 15 comparisons above wasn't found, hence re-apply routes
route change 10.16.0.0 mask 255.255.255.0 10.147.1.3 metric 10
route change 192.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
route change xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

您对编号变量的想法还不错:

@echo off
setlocal enabledelayedexpansion
REM get the output into numbered variables:
set i=1
for /f "delims=" %%a in ('route print^|findstr "127 10 192"') do (
  set /a i+=1
  set "_myvar_!i!=%%a"
)
ECHO search within those variables:
set _myvar_ |find "127"
ECHO or:
(for /f "tokens=1* delims==" %%a in ('set _myvar_') do @echo %%b) |find "127"

注意:当 i>10 时,这不会保持顺序(可能对您来说不是问题)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM