首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

批处理 复制除指定文件夹外的所有文件和文件夹

发布网友 发布时间:2022-04-26 23:53

我来回答

4个回答

热心网友 时间:2022-06-20 12:22

@echo off
set "spath=d:\A\B" %需要复制的目录%
set "spath_target=e:\abc" %复制的目标目录%
set "ignore_target=data" %排除的目录%
for /f "delims=" %%1 in ('dir/s/b %spath%')do ( 
 if not %%~nx1==%ignore_target% ( %判断是否包含data文件夹,如果包含则跳过%
  if exist "%%1\" ( %判断是文件夹还是文件,如果是文件夹,则用xcopy复制文件夹,否则用copy复制文件%
   echo 正在复制文件夹 - %%1
   echo d|xcopy /e /y "%%1" "%spath_target%\%%~p1\%%~nx1">nul 2>nul
  )else (
  echo 正在复制文件 - %%1
  copy "%%1" "%spath_target%\%%~p1\%%~nx1">nul 2>nul
  )
 )
) %有几个左括号就得有几个右括号括起来%
pause %暂停批处理% 
::>nul表示忽略正确的结果,2>nul表示忽略错误的结果,一起使用就是完全屏蔽执行结果.(屏蔽copy等不必要的返回结果)
::%spath_target%\%%~p1\%%~nx1的执行结果是 e:\abc\%%~p1(代表for循环返回结果,p[变量]=路径,不包括盘符)
::%%~nx1的执行结果是e:\abc\###\文件名+文件后缀名(xxx.xxx).如果是文件夹的话这里的x1没有任何作用的.是我偷懒复制上去的
::%%~nx1 n=name x=suffix,参数可以是n1或x1 也可以是nx1 这里的1代表变量名
::%%1是完整执行结果,不含参数
::delims=忽略循环中的空格部分
::copy或xcopy 文件/文件夹 目标文件/文件夹
::copy复制文件
::xcopy可以复制文件也可以文件夹,只不过这里的xcopy不能同时处理文件或文件夹,所以要用2个命令来分开处理
::echo d|表示自动执行参数操作(如果文件夹不存在则自动创建文件夹,无需手动操作)
::xcopy /e表示即使是空的文件夹也复制./y表示直接确定复制,无需确认
::详细的处理结果可以在菜单 - 运行 - 输入cmd,打开cmd窗口后,输入copy或xcopy、if等显示帮助信息(包括一些参数指令的作用)

热心网友 时间:2022-06-20 12:23

@echo off
echo \data\>"%temp%\tmp.txt"
xcopy "d:\a\b\*.*" "e:\" /exclude:"%temp%\tmp.txt"

建立一个需排除文件夹的"%temp%\tmp.txt"文件

使用参数/exclude:进行复制,具体内容参考xcopy /?

追问大侠,用了你的方法,可行,高人呐。还想请教下,因为我是每天都备份的,备份至新建文件夹(例如文件夹命名:AA-20140410),我想自动删除超过30天的备份,该怎么写?
forfiles /p E:\ *.* /m -d -90 /c "cmd /c del /f @path"
这个有什么问题?

追答你这命令放在根目录执行很危险,会波及到非备份的文件。
安全点做法应该是你的备份文件统一放到一个文件夹下,再这文件夹下再细分每天备份的文件夹:
如:e:\back\aa-20140410
然后用forfiles /p e:\back\ /d -30 /c "cmd /c rd /q /s @path"
删除目录有风险,请备份后测试。

热心网友 时间:2022-06-20 12:23

Ctrl+a全选,再按住Ctrl键,左键单击data,这也就可以把它取消选择。再按Ctrl+c复制,打开E:\文件夹,按住Ctrl+v。完成

热心网友 时间:2022-06-20 12:24

写bat∶@echo off&xcopy d:\a\b e:\&del \s\q\a\f e:\a\b\data\*.*&rd e:\a\b\data 绝对行!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com