无忧启动论坛

标题: 求一个批量复制文件及文件夹的批处理 [打印本页]

作者: 泮安宁    时间: 2022-3-22 02:21
标题: 求一个批量复制文件及文件夹的批处理
有一个txt文件,内容是文件列表,但不是完整的路径,类似如下
  1. \1\a.txt
  2. \1\b.exe
  3. \1\2
  4. ......
复制代码
a.txt和b.exe是文件,2是文件夹,根据这个列表把这些文件复制到D:\3文件夹内
请各位大佬看看能不能写一个批处理,谢谢

作者: holley2008    时间: 2022-3-22 10:18
  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:08
holley2008 发表于 2022-3-22 10:18

谢谢
作者: 泮安宁    时间: 2022-3-22 13:30
holley2008 发表于 2022-3-22 10:18

大神,这个好像不能复制整个文件夹,列表内有文件夹,但好像没有被复制进去,你看看能不能再修改一下
作者: 泮安宁    时间: 2022-3-22 13:49
holley2008 发表于 2022-3-22 10:18

如果是文件夹会提示找不到文件
作者: dos时代菜鸟    时间: 2022-3-22 14:37
本帖最后由 dos时代菜鸟 于 2022-3-22 14:42 编辑

md x1
xcopy /e /f 1 x1
作者: 泮安宁    时间: 2022-3-22 14:45
dos时代菜鸟 发表于 2022-3-22 14:37
md x1
xcopy /e /f 1 x1

大佬我不会批处理,您能不能把上面那位大佬发的批处理和你的整合一下,既能复制文件,又能复制文件夹,不知道可以实现吗
作者: holley2008    时间: 2022-3-22 17:08
泮安宁 发表于 2022-3-22 13:30
大神,这个好像不能复制整个文件夹,列表内有文件夹,但好像没有被复制进去,你看看能不能再修改一下

xcopy的参数 添加 /i /e 即可复制目录
作者: 泮安宁    时间: 2022-3-22 17:13
holley2008 发表于 2022-3-22 17:08
xcopy的参数 添加 /i /e 即可复制目录

谢谢大佬,我试一下
作者: yfwang0798    时间: 2022-3-22 21:41
命令 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%"

    )

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

作者: 泮安宁    时间: 2022-3-23 00:17
本帖最后由 泮安宁 于 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的相对路径不变
作者: 黑中见白    时间: 2022-3-23 00:31
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的文件
作者: 黑中见白    时间: 2022-3-23 00:33
cpyfil.7z (15.18 KB, 下载次数: 17)
作者: 泮安宁    时间: 2022-3-23 01:53
黑中见白 发表于 2022-3-23 00:33

好的,谢谢大佬,我试一下
作者: yfwang0798    时间: 2022-3-24 14:44
本帖最后由 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
yfwang0798 发表于 2022-3-24 14:44
@echo off
rem set base_dir=\1
set out_folder="D:\3"

谢谢大佬




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3