[英]How to store a command's multi-line output to a batch variable?
我不是批处理脚本的兄弟,但我可以适应。 我正在尝试制作一个批处理文件来检查防火墙 state,并切换它(开/关)。
注意:[命令的 output 包含 ON 或 OFF 在它的 output 以及其他字符串]。
set "result=" netsh advfirewall show allprofiles state
IF not x%result:ON=%==x%result% (
::Disable Firewall
NetSh Advfirewall set allprofiles state off
) ELSE (
::Enable Firewall
NetSh Advfirewall set allprofiles state on
)
您看到的问题结果变量仅包含命令 output 的最后一行,因此如何将命令的多行 output 存储在变量中,而不必将命令的 Z78E6221F6393D1356D681DB3 存储在文件中,因为它似乎是多余的。
您应该能够使用单个命令行来完成此操作,而无需变量或使用for-loop :
@NetSh AdvFirewall Show CurrentProfile State|Find "ON">NUL&&(NetSh AdvFirewall Set CurrentProfile State OFF)||NetSh AdvFirewall Set CurrentProfile State ON
对于扩展的批处理文件版本,还要确保设置了入站和出站规则。 (请注意,这些只是示例,不是建议,提供这些是为了在拆分为多行时更好地显示原始建议的布局) :
@Echo Off
NetSh AdvFirewall Show CurrentProfile State | Find "ON" >NUL && (
NetSh Advfirewall Set CurrentProfile FirewallPolicy BlockInboundAlways,AllowOutbound
NetSh AdvFirewall Set CurrentProfile State OFF
) || (
NetSh AdvFirewall Set CurrentProfile State ON
NetSh Advfirewall Set CurrentProfile FirewallPolicy AllowInbound,AllowOutbound
)
请注意,这些取决于语言,因此如果您的系统语言不是英语,则可能需要调整。
如果您不是管理员组的成员,并且您的 PC 上启用了 UAC,请以管理员身份运行脚本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.