for
对一组文件中的每一个文件执行某个特定命令
for %variable IN (set) DO command [command-parameters]
%variable
指定一个单一字母可替换的参数。
(set)
指定一个或一组文件。可以使用通配符。
command
指定对每个文件执行的命令。
command-parameters
为特定命令指定参数或命令行开关。
一般用法
-
for %i in (1,2,3,4,5) do echo %i
就是将1,2,3,4,5打印出来(如果在批处理文件中%i
要写成%%i
,跟C语言类似),也可以遍历字符串等其他元素 -
for %i in (f:\*.*) do echo %i
或者for %i in (f:\*) do echo %i
遍历F盘中的所有文件
/L
参数
FOR /L %variable IN (start,step,end) DO command [command-parameters]
该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列1 2 3 4 5,(5,-1,1)将产生序列(5 4 3 2 1)
可以用for循环做批量操作(比如创建文件夹,打开网页)
/d
参数
FOR /D %variable IN (set) DO command [command-parameters]
如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配
-
for /d %i in (F:\*) do echo %i
列出F盘下的所有目录 -
for /d %i in (F:\?????) do echo %i
列出F盘下目录明长度小于5个字符的目录
/r
参数
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句.
如果在 /R 后没有指定目录规范,则使用当前目录.如果集仅为一个单点(.)字符,则枚举该目录树.
-
for /r F:\ %i in (*.txt) do echo %i
列出F盘中所有.txt文件(包括子目录下的)
提取Win10壁纸的小程序分析
百度搜索的某大佬的代码↓
@echo off
set pathofpic=%UserProfile%\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets
set mudi=F:\cmdWinPicture
for /f %%i in ('dir /a-d /b %pathofpic%') do (copy %pathofpic%\%%i %mudi%\%%i.jpg)
pause
- 使用了for的
/f
参数,括号内是壁纸目录下所有的文件(dir 的/b参数).
关于for /f
的用法,参考for /f 用法详解
我的代码↓
@echo off
setlocal enabledelayedexpansion
set pathofpic=%UserProfile%\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets
set mude=F:\cmdWinPicture
set index=0
for %%i in (%pathofpic%\*) do (
set /a index+=1
copy %%i %mude%\bizhi!index!.jpg
)
pause
注意:
setlocal enabledelayedexpansion
很重要!!! 不然在for循环内部变量index一直是0,必须通过!index!
"动态提取"该变量的值,可以参考bat循环中变量自增问题和批处理中setlocal enabledelayedexpansion的作用详细整理for循环do代码块可以分行写,可读性更强
改进版
原版每次读取到的时候变量index
都从1开始,导致原文件会被新文件替换
@echo off
setlocal enabledelayedexpansion
set pathofpic=%UserProfile%\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets
set mude=F:\cmdWinPicture
set /p index=<%mude%\index.txt
for %%i in (%pathofpic%\*) do (
copy %%i %mude%\bizhi!index!.jpg
set /a index+=1
)
echo !index! > %mude%\index.txt
pause
- 思路:将变量保存到
index.txt
文件中,读完之后再将其写入文件中 - 注意
set /p index=<%mude%\index.txt
的用法(超实用!)