bat批量删除指定以外的文件和文件夹
...大约 3 分钟
写这个批处理的目的,是为了方便将Vuepress打包好的dist文件夹的文件,复制到我指定的另外一个文件夹内。 写了这么一个批处理,所以简单的记录一下实现方法。
目录结构
首先来看一下两个文件夹下的文件,左边是dist目录下编译好的文件。右边是我需要复制到的文件夹下的文件
删除文件
复制之前,需要做的是删除原来的文件,因为我发现,每次编译后的css文件和js文件的文件名会变,直接复制dist 目录下的文件过去,之前的css和js文件还是会在,可是又不会再用了,所以干脆直接全删了。但是文件夹里还有些我自己添加的文件, 比如 README.md
,所以还需要排除指定的文件。
排除文件
使用 dir
命令来获取文件和文件夹列表
// 获取文件夹列表
dir /ad /b | findstr /i /v ".git" > folders.txt
// 获取文件列表
dir /a-d /b | findstr /i /v "README.md .txt .bat google49dbd47831accd61.html .gitignore" > files.txt
命令中参数的含义:
/ad
:只显示目录属性的文件名/b
:只显示文件名/i
:忽略大小写/v
:只显示不包含匹配的行/a-d
:只显示不是目录属性的文件名> folders.txt
:将筛选出的文件名保存到folders.txt文件中
删除文件夹
删除文件夹,使用的是 rd
命令,使用for循环读取folders.txt中的文件夹名,并删除
set folder=''
for /f %%i in (folders.txt) do (
set folder=%%i
rd /s /q !folder!
echo ·删除 !folder!
)
命令 rd
参数的含义:
/s
:除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。/q
:安静模式,带 /S 删除目录树时不要求确认
删除文件
删除文件,使用的是 del
命令,使用for循环读取files.txt中的文件夹名,并删除
set file=''
for /f %%j in (files.txt) do (
set file=%%j
del !file!
echo ·删除 !file!
)
// 最后再删除 folders.txt 和 files.txt 文件
del folders.txt
del files.txt
复制文件
复制文件,使用的是 xcopy
命令
xcopy /e "<路径>" "<路径>"
最终的脚本
注意脚本中的 SETLOCAL ENABLEDELAYEDEXPANSION
,在for循环中,当一个变量被多次赋值时,%%所获取的仅仅是第一次被赋予的值;要想刷新的值,就必须首先通过命令 SETLOCAL ENABLEDELAYEDEXPANSION
来开启延迟变量开关,然后用!!来获取值
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
dir /ad /b | findstr /i /v ".git" > folders.txt
dir /a-d /b | findstr /i /v "README.md .txt .bat google49dbd47831accd61.html .gitignore" > files.txt
set folder=''
for /f %%i in (folders.txt) do (
set folder=%%i
rd /s /q !folder!
echo ·删除 !folder!
)
set file=''
for /f %%j in (files.txt) do (
set file=%%j
del !file!
echo ·删除 !file!
)
del folders.txt
del files.txt
echo ·开始复制文件...
xcopy /e "D:\Git\workspace\Vuepress-Blog\docs\.vuepress\dist" "D:\Git\workspace\billsaul"
pause
Powered by Waline v3.3.0