batch-file - 带字符串迭代的批处理 FOR 循环
问题描述
我怎样才能使循环可以迭代字符串值与循环类似逻辑呈现:
set list[0]="string1"
set list[1]="string2"
...
set list[10]="string10"
for n in list do (
for /F "tokens=3 delims=: " %%H in ('sc query "list[n]" ^| findstr " STATE"') do (
if /I "%%H" NEQ "RUNNING" (
net stop list[n]
net start list[n] )
else( ) )
)
解决方案
将一些提示融入代码中,
- 我使用具有两个位置的列表索引来克服可能的排序问题。
- 为了避免在“单个”命令中出现延迟扩展问题,我枚举服务的方式与初始化列表的方式相同。
- 用于测试网络停止/启动命令仅被回显。
- 所以我可以使用系统中的真实服务名称。
:: Q:\Test\2018\07\25\SO_51512357.cmd
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
:: initialize/clear list
For /F "delims==" %%A in ('2^>Nul set list[') do Set "%%A="
:: use self expanding code to set list to array list[xx]
Set i=99
Set "list=,WPDBusEnum,WpnService,wscsvc,WSearch,wuauserv,WwanSvc"
Set "list=%list%,xbgm,XblAuthManager,XblGameSave,XboxGipSvc,XboxNetApiSvc"
Set "list=%list:,="&Set /a i+=1&Set "list[!i:~-2!]=%"
Set list
:: technically the following is one line, line breaks inserted where possible.
For /F "tokens=2delims==" %%n in (
'2^>Nul set list['
) do for /F "tokens=3 delims=: " %%H in (
'sc query "%%n" 2^>Nul ^| findstr /C:" STATE :"'
) do if /I "%%H" NEQ "RUNNING" (
echo net stop %%n
echo net start %%n
) else (
echo svc running %%n
)
样本输出:
> Q:\Test\2018\07\25\SO_51512357.cmd
list[00]=WPDBusEnum
list[01]=WpnService
list[02]=wscsvc
list[03]=WSearch
list[04]=wuauserv
list[05]=WwanSvc
list[06]=xbgm
list[07]=XblAuthManager
list[08]=XblGameSave
list[09]=XboxGipSvc
list[10]=XboxNetApiSvc
net stop WPDBusEnum
net start WPDBusEnum
svc running WpnService
svc running wscsvc
svc running WSearch
net stop wuauserv
net start wuauserv
net stop WwanSvc
net start WwanSvc
net stop xbgm
net start xbgm
net stop XblAuthManager
net start XblAuthManager
net stop XblGameSave
net start XblGameSave
net stop XboxGipSvc
net start XboxGipSvc
net stop XboxNetApiSvc
net start XboxNetApiSvc
推荐阅读
- swift - Cocoa 中的多个撤消管理器?
- java - 如何在编译时跳过这个通用对象错误
- c# - 如何使用 jquery 和 asp.net(aspx 页面)将上传的 pdf、doc、jpg 文件保存在文件夹中
- reactjs - TypeError:在执行 todo 时使用 onChange 时无法在 Reactjs 中读取 null 的属性“值”
- mysql - 连接表后如何使用where子句?
- html - Flexbox 和 CSS 问题:未按我的预期显示
- jpa - 我的手动flush()对我的第二个persist()没有影响
- linux - 什么是韦兰的“损坏请求”?
- angular - Angular 反应式表单,基于另一个表单上的 FormControl 验证一个表单
- angular - 使用 NgbModal 服务时如何测试模态内容