for循环以及提取win10锁屏壁纸小程序

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的用法(超实用!)

你可能感兴趣的:(for循环以及提取win10锁屏壁纸小程序)