今天在网上看到有人发贴求助,想要将一个文件夹中的所有图片每200张一组移动到指定格式的子文件夹中,比如第1~200张移动到 00000 子文件夹,第201~400张移动到 00001 子文件夹,依此类推。很久没写bat脚本了,于是手痒就写了一个,有同样需求的朋友可以自取。
脚本其实很简单,用到的知识点不多,具体代码如下:
:: 批量移动图片脚本
@echo off
:: 开启变量延迟 ,这条必须加,否则后面获取变量值会有问题
setlocal enabledelayedexpansion
:: 指定图片目录(脚本默认放在图片目录的上一级目录)
set path=100_FUJI
:: 列出图片目录中的所有文件,并将文件列表输出到当前目录的0000.txt文件中
dir /B !path!>0000.txt
:: 进入图片目录
cd !path!
:: 设置变量 index 变量用来拼接子目录名称 (类似格式:00001,00020, 00300)
:: step 变量用来计算图片张数
set /a index=0
set /a step=0
:: 逐行读取脚本所在目录下的0000.txt中的内空
for /f "usebackq tokens=1,2* delims=." %%i in (%~dp0\0000.txt) do (
:: 判断文件格式,只处理图片
if /i %%j EQU jpg (
:: 设置变量 num 用来对图片进行分批,我这里为了测试,将图片每5张存一个文件夹
set /a num=!step!%%5
:: 利用取余数的方式来判断何时建新的文件夹
if /i !num! EQU 0 (
:: 拼接 00001 ~ 00009 的文件夹名
if !index! LSS 10 (
md 0000!index!
set dir=0000!index!
)
:: 拼接 00010 ~ 00099 的文件夹名
if !index! GTR 9 if !index! LSS 100 (
md 000!index!
set dir=000!index!
)
:: 拼接 00100 ~ 00999 的文件夹名
if !index! GTR 99 if !index! LSS 999 (
md 00!index!
set dir=00!index!
)
:: 文件夹名称的自增变量
set /a index+=1
)
:: 计算图片张数的自增变量
set /a step+=1
:: 复制图片到指定子文件夹
copy %%i.* %cd%\!dir!
)
)
:: 这条命令是为了暂停看执行效果的,可以删除
pause >nul
纯净版代码如下:
@echo off
setlocal enabledelayedexpansion
set path=100_FUJI
dir /B !path!>0000.txt
cd !path!
set /a index=0
set /a step=0
for /f "usebackq tokens=1,2* delims=." %%i in (%~dp0\0000.txt) do (
if /i %%j EQU jpg (
set /a num=!step!%%5
if /i !num! EQU 0 (
if !index! LSS 10 (
md 0000!index!
set dir=0000!index!
)
if !index! GTR 9 if !index! LSS 100 (
md 000!index!
set dir=000!index!
)
if !index! GTR 99 if !index! LSS 999 (
md 00!index!
set dir=00!index!
)
set /a index+=1
)
set /a step+=1
copy %%i.* %cd%\!dir!
)
)
pause >nul
网友评论