本文中的移动的文件到对应文件夹是基于此条博文的基础上
dos命令-嵌套for循环批处理用时间重命名文件_批处理for循环嵌套_weixin_45056141的博客-CSDN博客
本来分类移动文件是非常简单的,直接move 2023*.jpg 就行,但是文件量太大时(上万条),一次性移动电脑可能处理不过来,于是为了方便一点,而且可以间隔时间处理文件,让电脑休息一下,写了一个批处理。
任务目的:把含有时间前缀的文件移动到对应时间的文件夹
执行代码
@echo off
setlocal enabledelayedexpansion
set var=目的路径(直接复制文件所在的路径即可)
set /a count=0
for /f "skip=5 tokens=1,2* delims=_ " %%c in ('dir /b *.jpg') do (
echo %%c_%%d_%%e
set name=!var!%%c-%%d
set file=%%c_%%d_%%e
if count == 200 (
timeout /t 2
set /a count=0
)
set /a count=count+1
echo !file! && move !file! !name!
)
pause
运行成功的截图:
代码解析:
set var=D:\123\123\123\123 \------ 路径(目的路径)
set /a count=0 ------设置计数参数
for /f "tokens=1,2* delims=_ " %%c in ('dir /b *.jpg') do ( ------for/f的参数解析,以前的文章有过介绍,也可自行百度 。tokens是要分割的段数,1为第一段,2为第二段,*为剩下的所有;delims后面跟着的是分隔符,如果需要分隔多个字符,空格要在最后面,不然报错;从分割后的字段赋值,从c字母开始,%%e为剩下的所有;dir /b *.jpg显示所有图片
echo %%c_%%d_%%e -----打印文件名
set name=!var!%%c-%%d ------把剪切出来的字段和路径拼在一起,形成一个完整的路径,这里剪切出来的是年份和时间
set file=%%c_%%d_%%e ------把分割后的文件名重新连接起来
if count == 200 ( ------进行计数判断
timeout /t 2 ------达到200后暂停2秒钟
set /a count=0 ------重置计数参数
)
set /a count=count+1 ------技术参数+1
echo !file! && move !file! !name! ------打印文件名并移动文件到对应路径
遇到的bug:
for忘记使用了skip=4,开始时忽略前4个行数,结果导致前面几条图片没有被移动,找了很多问题,还以为是dir /b的问题,结果是添加了skip,后面去掉了skip就完全正常了
注意!!!:这个dos命令里的move使用有错误严重的后果,
move移动文件时一旦路径错误,不存在该路径时,不会报错,只会继续移动到一个不存在的文件夹,后续是再也找不到这些文件,实验时慎重使用!!!
、