Bat脚本学习-2:查找文件是否存在

@echo off&setlocal EnableDelayedExpansion
set filePath=D:1
set fileResult=D:1Result.txt set prefix=Pic
set isFound=0 set count=100 if exist "%fileResult%" del "%fileResult%" for /l %%i in (1,1,%count%) do ( set isFound=0 set n=000%%i set/p=.<nul for %%f in (%filePath%\%prefix%-*.*) do ( if exist %filePath%\%prefix%-!n:~-3!*.* set isFound=1 ) if !isFound!==0 ( echo %prefix%-!n:~-3!>>"%fileResult%" echo.%prefix%-!n:~-3!不存在 ) ) pause

边写边找资料,学语法,收获很大。文件是以XXX-001_xx.xxx这样存在的,如Pic-023_1.jpg、Pic-003a.png之类,前缀固定,中间有-,后面3位数字(需前补0),再后面可能有其它字符,扩展名不固定。

1、使用循环里的元素:要先设置setlocal EnableDelayedExpansion,有些类似JS的闭包,不特别设置的话每次取的值已经是循环完的值了,不是当时循环的值

2、前补0:如1要补成001,10要补成010,要先弄个变量n=000%%i,再用!n:~-3!来补0

3、用echo的话,显示完会换行,用set/p=.<nul的话,则不会换行,那个点是用来输出的(模拟进度条效果),set/p是接收用户输入,<nul是跳过等待,即直接替用户输入了

4、过程实时输出,最后也会输到一个文本文件中

双重循环,每次都要去遍历文件判断,效率很低。想弄个数组把文件名存起来,循环里只要取数组去判断就可以了。大概弄了一下,没最终弄出来,太迟了要睡了,算了吧。

bat里没有原生数组,但可以模拟,如定义 set Array[%i%] = xxx,然后取 Array[0]、Array[1]这些就可以

原文地址:https://www.cnblogs.com/liuyouying/p/6361915.html