欢迎关注「全栈工程师修炼指南」
专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享
设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习!
作者主页:[ https://www.weiyigeek.top ]
博客:[ https://blog.weiyigeek.top ]
关注回复【学习交流群】加入【安全开发运维】答疑交流群
目录:
本文为作者原创文章,为尊重作者劳动成果禁止非授权转载,若需转载请在【全栈工程师修炼指南】公众号留言,或者发送邮件到 [[email protected]] 中我将及时回复。
温馨提示: 此处为了激励作者创作更新以及防止被恶意转载,此篇文章象征性的设置为收费1RMB浏览,希望看友们理解并支持。
原文地址: 运维必学 | 循环语句-从零开始学Windows批处理(Batch)编程系列教程本文将主要针对在Windows批处理脚本中for循环的语法与使用实践案例分享,帮助各位运维打工人快速入门Windows批处理编程,作者从实际工作中抽取案例进行讲解。并尽量以通俗易懂的示例给初学者们,希望大家多多支持。https://mp.weixin.qq.com/s/jhw-kDQpCa9_tI_HaGZWjQ
本文将主要针对在Windows批处理脚本中for循环的语法与使用实践案例分享,帮助各位运维打工人快速入门Windows批处理编程,作者从实际工作中抽取案例进行讲解。并尽量以通俗易懂的示例给初学者们,希望大家多多支持。
描述: 在 Windows 批处理脚本中,类似于 Shell 其也是支持 for 循环条件判断的,其主要目的是对一组文件中的每一个文件执行某个特定命令。
语法示例:
# :: REM 交互式的CMD里是使用单个%
FOR %variable IN (set) DO command [command-parameters]
# :: REM 批处理脚本中是使用%%形式
FOR /D %%variable IN (set) DO command [command-parameters]
FOR /L %%variable IN (start,step,end) DO command [command-parameters]
FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]
FOR /F ["options"] %%variable IN (file-set | "string" |'command' ) DO command [command-parameters]
参数解析:
/D:启用命令扩展,则会支持字符串扩展,用于搜索"目录"或"文件夹",但不会搜索文件,也不搜索子目录;
/L: 启用增量数字序列生成,使用(start,step,end)表示以增量形式从开始到结束的一个数字序列
/R:启用通配符,递归查询目录下得所有文件、在/R后没有指定目录规范,如果集仅为一个单点(.)字符则枚举该目录树
/F: 启用针对字符串方面的操作,其中"options"关键字参数替代默认解析操作
eol=c - 指一个行注释字符的结尾(就一个)
skip=n - 指在文件开始时忽略的行数。
delims=xxx - 指分隔符集,替换了空格和跳格键的默认分隔符集。
tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身,会导致额外变量名称的分配。
# m-n格式为一个范围,通过 nth 符号指定 mth。
# 如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
usebackq - 指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在 file-set中使用双引号扩起文件名称.
温馨提示: 在批处理脚本文件中使用 FOR 命令时,指定变量请使用 %%variable
而不是 %variable
(只在CMD交互式命令行中可以如此使用),并且变量名称是区分大小写的所以 %i 不同于 %I。
描述: 使用通配符*
与?
遍历当前目录下指定文件扩展。
示例演示:
@echo off
for %%i in ("a","b","c",1,2,3) do (echo %%i)
echo.
:: # 查看当前目录下的.txt或者.log
echo "WeiyiGeek" > test.txt
echo "全栈工程师修炼指南" > demo.log
mkdir demo
for %%f in (*.txt *.log) do type %%f
:: # 使用通配符遍历显示当时目录下的文件(不包含目录)
for %%i in (*) do echo %%i
for %%i in (*.*) do echo %%i
:: # 列出只用两个字符作为文件名的文本文件
:: # 采用通配符? 一个表示一个字符
for %%i in (????.txt) do echo %%i
for %%i in (??.txt) do echo "%%i"
:: # 进行遍历扩展为txt的文件并删除,为了方便阅读建议将循环的命令使用()包裹
for %%a in (*.txt) do (echo "正在删除%%a" & del /s %%a)
温馨提示: 上述只是演示for循环的一些简单使用并且加深对for语句执行流程的理解(用到了通配符*和?),在实际中列出当前目录下各种文件的方法,最简单的还是用dir
命令;
补充示例:
1.采用for
与if
命令连用以达到区分本地存在那些盘符,,包括 U 盘和移动硬盘的分区,但是当光驱中有盘的时候也会被列出来(本示例的缺陷)。
@echo off
set str=c d e f g h i j k l m n o p q r s t u v w x y z
echo 当前系统的硬盘分区有:
for %%i in (%str%) do if exist %%i: echo %%i: 盘
pause
完整原文地址: 运维必学 | 循环语句-从零开始学Windows批处理(Batch)编程系列教程本文将主要针对在Windows批处理脚本中for循环的语法与使用实践案例分享,帮助各位运维打工人快速入门Windows批处理编程,作者从实际工作中抽取案例进行讲解。并尽量以通俗易懂的示例给初学者们,希望大家多多支持。https://mp.weixin.qq.com/s/jhw-kDQpCa9_tI_HaGZWjQ