使用bat脚本问题

使用脚本清理xxagent缓存ip

起因

GFW不知是不是贸易战原因,原有通过巨硬XBOX虚拟化terendo扫描出来的IP很快被污染
造成每次使用正向代理需要清除上一次生成的IP缓存列表文件

我原来都是使用手动方式进目录删除缓存,然后启动一个bat脚本ping 一个ipv6 地址,然后启动正代
但这样子做很明显第一步也是可以融合进脚本里的
脚本相当简单

但是,我写的脚本根本无法识别定义的缓存地址

WHY??

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 原来的脚本
@echo off
rem title "browser-agent"
echo "输入1则删除ip缓存"

set/p opt=请输入选择

echo %pa%
if "%opt%"=="1" (

set "pa=E:\Developer\project\github\XX-Net\data\gae_proxy\good_ip.txt"
echo "删除IP缓存,地址:"%pa%
del /f /s /q %pa%
echo "缓存删除成功!"

)

start "ping feature" /min ping -n 127 -6 ipv6.test-ipv6.com -l 0
call C:\Windows\System32\wscript.exe "E:\Developer\project\github\XX-Net\start.vbs"

在删除缓存那一步一直报语法错误,经查证设定的变量pa是未定义的

set命令用了很多,但是在if当中使用是第一次 直觉告诉我问题可能出在这里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 更改后的脚本
@echo off
rem title "browser-agent"
echo "输入1则删除ip缓存"

set/p opt=请输入选择
set "pa=E:\Developer\project\github\XX-Net\data\gae_proxy\good_ip.txt"
echo %pa%
if "%opt%"=="1" (
echo "删除IP缓存,地址:"%pa%
del /f /s /q %pa%
echo "缓存删除成功!"

)

start "ping feature" /min ping -n 127 -6 ipv6.test-ipv6.com -l 0
call C:\Windows\System32\wscript.exe "E:\Developer\project\github\XX-Net\start.vbs"

这样就可以使用了

原因

原来这也不叫if中无法定义变量
是复合语句需要使用变量延迟的手段

1
2
3
4
5
6
setlocal enabledelayedexpansion
if "%opt%"=="1" (
set pa=0
echo !pa!
)
endlocal

开启变量延迟就可以了