[英]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.