如何在此代码中更改status.txt和status2.txt的位置

时间:2015-11-12 09:40:40

标签: batch-file firewall

我有这个防火墙状态的批处理代码并且它成功运行。但是当我想将状态和status2的位置更改为不同的位置(例如桌面)时,它不起作用。请帮助

Netsh firewall show state > status.txt
Find /C "Operational mode                  = Enable" "status.txt" > 
status2.txt
For /f "skip=1 tokens=* delims= " %%a in (status2.txt) Do Set value2=%%a
Set value2=%value2:~23,1%
Del /F status.txt
Del /F status2.txt
If %value2%==0 exit     

1 个答案:

答案 0 :(得分:0)

设置value2 =%value2:~23,1%强烈依赖于文件名长度。相反,使用Set" value2 =%value2:〜-1%"提取字符串中的最后一个字符。 另一种方法:不使用辅助文件 奖励:没有辅助文件,没有循环 脚本(注意模式环境变量仅用于演示注入,请参阅输出;此外,如果%value2%== 0出口命令省略用于调试目的): @ECHO OFF SETLOCAL EnableExtensions rem EnableDelayedExpansion 设置"模式=%~1" 如果"%mode%" ==""设置"模式=启用" rem祖传方法有所改善 Netsh防火墙显示状态> "%TEMP%\ status.txt中" 查找/ C"操作模式=%模式%" "%TEMP%\ status.txt中" > "%TEMP%\ status2.txt" 对于/ f" usebackq delims =" %% a in("%temp%\ status2.txt")Do Set" value2 = %% a" 设置" value2 =%value2:〜-1%" Del / F"%temp%\ status.txt" Del / F"%temp%\ status2.txt" echo 2文件,find:value2 = [%value2%] 没有辅助文件的rem 设置" value2 =" for / F" delims =" (%#);   Netsh防火墙显示状态^ |查找/ C"操作模式=%模式%" ')做Set" value2 = %% a" echo no files,find:value2 = [%value2%] rem没有辅助文件,没有`for`循环 设置" value2 =" netsh firewall show state | findstr / R" Operational.mode。* =。%mode%$"> NUL set / A" value2 = - (%errorlevel%-1)" echo no files,no loop:value2 = [%value2%] 输出: ==> D:\ bat \ SO \ 33668356.bat启用  2个文件,找到:value2 = [1] 没有文件,找到:value2 = [1] 没有文件,没有循环:value2 = [1] ==> D:\ bat \ SO \ 33668356.bat禁用  2个文件,找到:value2 = [0] 没有文件,找到:value2 = [0] 没有文件,没有循环:value2 = [0] ==> 资源(必读): (命令参考)Windows CMD命令行的A-Z索引 (其他特殊情况)Windows CMD Shell命令行语法 (%〜1,%% a等特殊页面)命令行参数(参数) (>,> NUL,|等特殊页面)重定向 (^ |等特殊页面)转义字符,分隔符和引号