泮安宁 发表于 2022-3-22 02:21:34

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

有一个txt文件,内容是文件列表,但不是完整的路径,类似如下
\1\a.txt
\1\b.exe
\1\2
......a.txt和b.exe是文件,2是文件夹,根据这个列表把这些文件复制到D:\3文件夹内
请各位大佬看看能不能写一个批处理,谢谢

holley2008 发表于 2022-3-22 10:18:33

set "out_folder=D:\3"
for /f %%a in (xxx.txt) do (
    for /f "delims=" %%b in ('dir /b /s /a-d %%a') do (
      xcopy /y "%%b" "%out_folder%"
    )
)https://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif

泮安宁 发表于 2022-3-22 13:08:40

holley2008 发表于 2022-3-22 10:18


谢谢{:1_186:}

泮安宁 发表于 2022-3-22 13:30:57

holley2008 发表于 2022-3-22 10:18


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

泮安宁 发表于 2022-3-22 13:49:27

holley2008 发表于 2022-3-22 10:18


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

dos时代菜鸟 发表于 2022-3-22 14:37:53

本帖最后由 dos时代菜鸟 于 2022-3-22 14:42 编辑

md x1
xcopy /e /f 1 x1

泮安宁 发表于 2022-3-22 14:45:39

dos时代菜鸟 发表于 2022-3-22 14:37
md x1
xcopy /e /f 1 x1

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

holley2008 发表于 2022-3-22 17:08:30

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

xcopy的参数 添加 /i /e 即可复制目录https://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif

泮安宁 发表于 2022-3-22 17:13:51

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

谢谢大佬,我试一下

yfwang0798 发表于 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%"

    )

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

泮安宁 发表于 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的相对路径不变

黑中见白 发表于 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的文件

黑中见白 发表于 2022-3-23 00:33:13

泮安宁 发表于 2022-3-23 01:53:20

黑中见白 发表于 2022-3-23 00:33


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

yfwang0798 发表于 2022-3-24 14:44:41

本帖最后由 yfwang0798 于 2022-3-24 14:55 编辑

@echo off
rem set base_dir=\1
set out_folder="D:\3"
ifnot 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:39

yfwang0798 发表于 2022-3-24 14:44
@echo off
rem set base_dir=\1
set out_folder="D:\3"


谢谢大佬
页: [1]
查看完整版本: 求一个批量复制文件及文件夹的批处理