最近有同事说,搜狗输入法老是偷偷联网,导致网络后台有异常报警,因此我考虑用批处理的方法来设置一个 Windows 防火墙,以便实现屏蔽联网的功能。当然,并非说软件联网一定会有问题,这里主要是侧重于演示批处理的用法罢了。
for 循环的用法
最简单的形式就是
SET 列表变量=数据1,数据2,...,数据n
,即多个数据之间使用逗号分隔;然后使用FOR %%i IN ( %列表变量% ) DO ( 相关引用语句 )
实现循环计算,如下:@ECHO OFF SET sg_pro=SogouToolkits,SGTool,PinyinUp,SGDownload,ShowInfo,SGMyInput,SGKaomoji,userNetSchedule @echo %sg_pro% echo. for %%a in ( %sg_pro% ) do ( echo %%a ) echo 执行完毕! echo. pause
如果要在
for
外部套接if
语句,那么可能就需要使用 延迟变量扩展 来处理了,相关变量的引用形式将从%变量%
变为!变量!
,如下:@SETLOCAL ENABLEDELAYEDEXPANSION @ECHO OFF @SET sg_dir=%ProgramFiles% (x86)\SogouInput if not exist "%sg_dir%" ( echo 您的搜狗输入法路径为自定义,需要人工核查更正! ) else ( @echo. SET sg_pro=SogouToolkits,SGTool,PinyinUp,SGDownload,ShowInfo,SGMyInput,SGKaomoji,userNetSchedule @echo !sg_pro! for %%a in ( !sg_pro! ) do ( echo. echo %%a ) echo 执行完毕!请直接关闭窗口... ) echo. pause
在上述基础上,一个完整的循环脚本可以如下:
@SETLOCAL ENABLEDELAYEDEXPANSION @ECHO OFF @SET sg_dir=%ProgramFiles% (x86)\SogouInput if not exist "!sg_dir!" ( echo 您的搜狗输入法路径为自定义,需要人工核查更正! ) else ( echo 切换至程序路径 echo. c: && cd !sg_dir! echo 确定搜狗拼音版本 for /d %%p in (*) do ( echo %%p | findstr "^[0-9]" > NUL && ( set sg_ver=%%p ) ) echo !sg_ver! echo. @set sg_pro=SogouToolkits,SGTool,PinyinUp,SGDownload,ShowInfo,SGMyInput,SGKaomoji,userNetSchedule @SET sg_path=!sg_dir!\!sg_ver! echo 逐项循环处理 for %%a in ( !sg_pro! ) do ( echo %%a echo. ) echo 执行完毕!请直接关闭窗口... ) echo. pause
除了使用
SET
命令指令 for 循环使用的列表外,还可以通过 for /f 指定文件循环、for /d 指定目录循环等方式来构建循环的列表。如下:@SETLOCAL ENABLEDELAYEDEXPANSION @ECHO OFF @SET sg_dir=%ProgramFiles% (x86)\SogouInput if not exist "!sg_dir!" ( echo 您的搜狗输入法路径为自定义,需要人工核查更正! ) else ( echo. c: && cd !sg_dir! echo 确定搜狗拼音版本 for /d %%p in (*) do ( echo %%p | findstr "^[0-9]" > NUL && ( set sg_ver=%%p ) ) echo !sg_ver! echo. echo 当前搜狗拼音的路径 @set sg_pro=SogouToolkits,SGTool,PinyinUp,SGDownload,ShowInfo,SGMyInput,SGKaomoji,userNetSchedule @SET sg_path=!sg_dir!\!sg_ver! echo !sg_path! echo. echo 逐项循环处理 for /r %%a in ("%sg_path%\*.exe") do ( echo %%a echo. ) echo 执行完毕!请直接关闭窗口... ) echo. pause
注意:上述
for /f
中使用%变量%
来引用变量,而使用!变量!
则不成功,相关变量的延迟扩展原理我还不是很清晰,欢迎网友交流!
以管理员权限运行
为了使得脚本可以在 Windows 10 等平台上直接运行,可以给脚本叫上管理员权限功能,直接在脚本头部增加以下内容即可:
:: 获取管理员权限
@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"
参考文献
zhanglintc.
Batch 批处理中的 EnableDelayedExpansion 详解
[EB/OL].https://imlane.zhanglintc.co/post/batchpi-chu-li-zhong-de-enabledelayedexpansion, 2023/08/08.延迟变量扩展用法
凉城.
批处理脚本遍历指定文件夹下的文件
[EB/OL].https://www.cnblogs.com/liangblog/p/9835940.html, 2023/08/08.云上科技电脑工作室.
浅谈批处理获取管理员运行权限的几种方法
[EB/OL].https://www.cnblogs.com/conducer/p/10591614.html, 2023/08/08.
最后更新: 2023/08/09 00:21:18
作者: David Faraday
主用链接: https://faradays-studio.gitee.io/202308082235/
备用链接: https://faradays-studio.github.io/202308082235/
许可协议: CC BY-NC-SA 4.0.