[英]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 行)捕获为单个变量。
不借助外部工具是否可行?
我知道一些类似this 、 this或this的方法,但我无法使其工作。
我已经尝试了下面的解决方案,但不幸的是它只存储了最后一行。
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.