繁体   English   中英

如何将命令的多行 output 存储到批处理变量中?

[英]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 存储在文件中,因为它似乎是多余的。

您应该能够使用单个命令行来完成此操作,而无需变量或使用

@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.

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