无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3267|回复: 15
打印 上一主题 下一主题

[求助] 求一个批量复制文件及文件夹的批处理

[复制链接]
跳转到指定楼层
1#
发表于 2022-3-22 02:21:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有一个txt文件,内容是文件列表,但不是完整的路径,类似如下
  1. \1\a.txt
  2. \1\b.exe
  3. \1\2
  4. ......
复制代码
a.txt和b.exe是文件,2是文件夹,根据这个列表把这些文件复制到D:\3文件夹内
请各位大佬看看能不能写一个批处理,谢谢
2#
发表于 2022-3-22 10:18:33 | 只看该作者
  1. set "out_folder=D:\3"
  2. for /f %%a in (xxx.txt) do (
  3.     for /f "delims=" %%b in ('dir /b /s /a-d %%a') do (
  4.         xcopy /y "%%b" "%out_folder%"
  5.     )
  6. )
复制代码

点评

如果是文件夹会提示找不到文件  详情 回复 发表于 2022-3-22 13:49
大神,这个好像不能复制整个文件夹,列表内有文件夹,但好像没有被复制进去,你看看能不能再修改一下  详情 回复 发表于 2022-3-22 13:30
谢谢  详情 回复 发表于 2022-3-22 13:08
回复

使用道具 举报

3#
 楼主| 发表于 2022-3-22 13:08:40 | 只看该作者
回复

使用道具 举报

4#
 楼主| 发表于 2022-3-22 13:30:57 | 只看该作者

大神,这个好像不能复制整个文件夹,列表内有文件夹,但好像没有被复制进去,你看看能不能再修改一下

点评

xcopy的参数 添加 /i /e 即可复制目录  详情 回复 发表于 2022-3-22 17:08
回复

使用道具 举报

5#
 楼主| 发表于 2022-3-22 13:49:27 | 只看该作者

如果是文件夹会提示找不到文件
回复

使用道具 举报

6#
发表于 2022-3-22 14:37:53 | 只看该作者
本帖最后由 dos时代菜鸟 于 2022-3-22 14:42 编辑

md x1
xcopy /e /f 1 x1

点评

大佬我不会批处理,您能不能把上面那位大佬发的批处理和你的整合一下,既能复制文件,又能复制文件夹,不知道可以实现吗  详情 回复 发表于 2022-3-22 14:45
回复

使用道具 举报

7#
 楼主| 发表于 2022-3-22 14:45:39 | 只看该作者

大佬我不会批处理,您能不能把上面那位大佬发的批处理和你的整合一下,既能复制文件,又能复制文件夹,不知道可以实现吗
回复

使用道具 举报

8#
发表于 2022-3-22 17:08:30 | 只看该作者
泮安宁 发表于 2022-3-22 13:30
大神,这个好像不能复制整个文件夹,列表内有文件夹,但好像没有被复制进去,你看看能不能再修改一下

xcopy的参数 添加 /i /e 即可复制目录

点评

谢谢大佬,我试一下  详情 回复 发表于 2022-3-22 17:13
回复

使用道具 举报

9#
 楼主| 发表于 2022-3-22 17:13:51 | 只看该作者
holley2008 发表于 2022-3-22 17:08
xcopy的参数 添加 /i /e 即可复制目录

谢谢大佬,我试一下
回复

使用道具 举报

10#
发表于 2022-3-22 21:41:51 | 只看该作者
命令 dir /b /a:-d  输出只显示 文件名,不会显示 文件夹,
修改只需将 参数 /a:-d 去掉 就可以了。

set "out_folder=D:\3"

for /f %%a in (xxx.txt) do (

    for /f "delims=" %%b in ('dir /b /s  %%a') do (

        xcopy /y "%%b" "%out_folder%"

    )

这个批处理对于在不同文件夹下,如果有相同文件名或子文件夹的情况,则没有考虑复制时,是否覆盖的情况

点评

可不可以按目录复制,就是一个文件的路径为\1\2\3.txt,把这个文件复制到D:\4,复制完成后3.txt的路径为D:\4\1\2\3.txt  详情 回复 发表于 2022-3-23 00:17
回复

使用道具 举报

11#
 楼主| 发表于 2022-3-23 00:17:22 | 只看该作者
本帖最后由 泮安宁 于 2022-3-23 00:18 编辑
yfwang0798 发表于 2022-3-22 21:41
命令 dir /b /a:-d  输出只显示 文件名,不会显示 文件夹,
修改只需将 参数 /a:-d 去掉 就可以了。

可不可以按目录复制,就是一个文件的路径为\1\2\3.txt,把这个文件复制到D:\4,复制完成后3.txt的路径为D:\4\1\2\3.txt,即3.txt的相对路径不变
回复

使用道具 举报

12#
发表于 2022-3-23 00:31:43 | 只看该作者
B. 你可以使用cpyfil去复制在列表里的文件或计算它的大小。

i. 计算在aa.txt里文件的大小:

cpyfil aa.txt

ii. 复制在aa.txt里的文件到X驱动器:

cpyfil aa.txt X

iii. 计算文件的大小,只处理在C驱动器里的文件:

cpyfil -m C:=C: aa.txt

iv. 计算文件的大小,在这系统里在aa.txt里的C:实际是在D::

cpyfil -m C:=D: aa.txt

v. 复制文件, 在这系统里在 aa.txt里的C:实际是在D:,复制它们到X驱动器:

cpyfil -m C:=D: aa.txt X

vi. 拷贝不大于所指定MB大小的文件

cpyfil -s 20 aa.txt X:

上面例子的意思是不拷贝aa.txt中大于20MB的文件

C. cpyfil 只能复制可以访问的文件,复制文件像注册表等可以使用cpylst.cmd。

i. cpylst.cmd xp C: aa.txt X

xp - 当前的OS,如果它是一个视窗2003服务器,就使用2K3。

C: - 系统驱动器

aa.txt - 列表文件

X - 目标驱动器

ii. 拷贝不大于所指定MB大小的文件

cpylst xp C: -s 20 aa.txt X:

上面例子的意思是不拷贝aa.txt中大于20MB的文件
回复

使用道具 举报

13#
发表于 2022-3-23 00:33:13 | 只看该作者
cpyfil.7z (15.18 KB, 下载次数: 17)

点评

好的,谢谢大佬,我试一下  详情 回复 发表于 2022-3-23 01:53
回复

使用道具 举报

14#
 楼主| 发表于 2022-3-23 01:53:20 | 只看该作者

好的,谢谢大佬,我试一下
回复

使用道具 举报

15#
发表于 2022-3-24 14:44:41 | 只看该作者
本帖最后由 yfwang0798 于 2022-3-24 14:55 编辑

@echo off
rem set base_dir=\1
set out_folder="D:\3"
if  not exist %out_folder% mkdir %out_folder%
rem 批处理文件和 xxx.txt在同一个文件夹


setlocal enabledelayedexpansion
for /f %%a in (xxx.txt) do (
set full=%%a
set name=%%~na     

   if not exist !full!\  (
    xcopy /y !full!  %out_folder%
  )  else ( if not exist %out_folder%\!name! mkdir %out_folder%\!name!
   xcopy /y /e /i  !full!  %out_folder%\!name! )
   


)
start "" %out_folder%

点评

谢谢大佬  详情 回复 发表于 2022-3-24 18:00
回复

使用道具 举报

16#
 楼主| 发表于 2022-3-24 18:00:39 | 只看该作者
yfwang0798 发表于 2022-3-24 14:44
@echo off
rem set base_dir=\1
set out_folder="D:\3"

谢谢大佬
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-19 12:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表