簡體   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