十八比特 十八比特
⚡ 18bit DNS (opens new window)
🏠 主页
  • 🌐 网站
  • 📦 资源
  • 📝 教程
  • 📐 制表符
  • 🗃️ 分类
  • 🏷️ 标签
  • 🗄️ 归档
📃 文章日志
ℹ️ 关于

十八比特

风带来故事的种子,时间使之发芽
⚡ 18bit DNS (opens new window)
🏠 主页
  • 🌐 网站
  • 📦 资源
  • 📝 教程
  • 📐 制表符
  • 🗃️ 分类
  • 🏷️ 标签
  • 🗄️ 归档
📃 文章日志
ℹ️ 关于
  • bat批量删除指定以外的文件和文件夹
    • 目录结构
    • 删除文件
    • 复制文件
    • 最终的脚本
  • 计算机基础知识要点
  • 记一次 Ubuntu持续io写入排查
  • Nginx 反向代理路径问题
  • 随笔
秋澪冬安
2020-11-21
目录

bat批量删除指定以外的文件和文件夹

写这个批处理的目的,是为了方便将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
#命令#批处理
上次编辑: 2024/08/30, 16:21:31

计算机基础知识要点→

最近更新
01
SSH跳板机访问内网服务
06-16
02
GPG 导出导入命令
06-16
03
从零开始的 All In One
06-14
更多文章>
Theme by Vdoing | Copyright © 2020-2025 十八比特 | 蜀ICP备2022002410号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式