粘贴如下代码到文本文档保存,改后缀为bat运行即可
:start
@echo off
::若检测到U盘插入,则自动拷贝文件到U盘
::pt为自动备份的目录路径
setlocal enabledelayedexpansion
set "pt=D:\Desktop\自动备份"
:check
echo 正在检测U盘
for %%i in (d e f g h i j k ) do (
fsutil fsinfo drivetype %%i: | findstr "可移动" >nul 2>nul && set upan=%%i:
)
if "%upan%"=="" (
echo 未检测到U盘
ping -n 2 127.0.1>nul
cls
goto :check
)
echo 检测到U盘
echo 本次复制的文件:
if exist "%upan%\备份" (
::copy "!pt!\*.*" "%upan%\备份\" /v
xcopy "!pt!\*.*" "%upan%\备份\" /s /h /d /c /y
goto :1
) else (
md "%upan%\备份"
::copy "!pt!\*.*" "%upan%\备份\"
xcopy "!pt!\*.*" "%upan%\备份\" /s /h /d /c /y
)
goto :2
:1
echo 已成功将目录文件备份至U盘
ping -n 2 127.0.1>nul
pause>nul
goto :start
:2
echo 已成功将目录文件备份至U盘
ping -n 2 127.0.1>nul
pause>nul
goto :start
Xcopy的扩展命令:
/c 忽略错误并继续其他文件的复制
/d 复制新文件,已复制的将不再重新复制;若有新版本文件,将覆盖旧版本文件
/s 复制非空的目录和子目录。如果省略 /s,xcopy 将在一个目录中工作
/h 复制具有隐藏和系统文件属性的文件(默认情况下,xcopy不复制隐藏或系统文件)
/y 不提示要覆盖文件
/z 断点续传
创建文件夹:
md "路径"
echo 显示字符串
pause>nul 暂停、按任意键继续
:start 标记,配合goto语句使用
goto :start 跳转到标记处
运行效果:
原路径:
U盘:
Tips:
如果出现乱码,则编码选择ANSI
对于U盘来说,存放大量的小文件是比较头疼的事情
可以先压缩再备份
@echo off
::pt是待压缩的文件夹路径
set pt=D:\3dMaxWorkplace
::需要添加环境变量path C:\Program Files\WinRAR;
WinRAR a -r D:\Desktop\自动备份\"%pt:~3%" %pt%::D:\Desktop\自动备份\"%pt:~3%"是压缩包存放路径,压缩包以原文件夹命名
pause
效果:
如需限制拷贝的文件类型,比如我只想要mp4
只需要将代表后缀的*号替换为mp4即可
xcopy "!pt!\*.mp4" "%upan%\备份\" /s /h /d /c /y
copy与xcopy的区别
copy只能复制指定文件,不能复制指定的文件夹及其子目录
set pt="D:\Desktop\测试"
copy /v /y /z "%pt%\*.*" "F:\备份"
pause测试文件夹:
备份文件夹:
可见,copy只能复制路径下的文件,不能复制子目录及其文件
不过,copy可以显示复制进度条,xcopy不可以
美中不足的是,批处理无法做到弹出U盘,因为在命令行时代甚至没有USB接口