求一个批量复制文件及文件夹的批处理
有一个txt文件,内容是文件列表,但不是完整的路径,类似如下\1\a.txt
\1\b.exe
\1\2
......a.txt和b.exe是文件,2是文件夹,根据这个列表把这些文件复制到D:\3文件夹内
请各位大佬看看能不能写一个批处理,谢谢
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 holley2008 发表于 2022-3-22 10:18
谢谢{:1_186:} holley2008 发表于 2022-3-22 10:18
大神,这个好像不能复制整个文件夹,列表内有文件夹,但好像没有被复制进去,你看看能不能再修改一下 holley2008 发表于 2022-3-22 10:18
如果是文件夹会提示找不到文件 本帖最后由 dos时代菜鸟 于 2022-3-22 14:42 编辑
md x1
xcopy /e /f 1 x1 dos时代菜鸟 发表于 2022-3-22 14:37
md x1
xcopy /e /f 1 x1
大佬我不会批处理,您能不能把上面那位大佬发的批处理和你的整合一下,既能复制文件,又能复制文件夹,不知道可以实现吗 泮安宁 发表于 2022-3-22 13:30
大神,这个好像不能复制整个文件夹,列表内有文件夹,但好像没有被复制进去,你看看能不能再修改一下
xcopy的参数 添加 /i /e 即可复制目录https://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif holley2008 发表于 2022-3-22 17:08
xcopy的参数 添加 /i /e 即可复制目录
谢谢大佬,我试一下 命令 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: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的相对路径不变 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
好的,谢谢大佬,我试一下 本帖最后由 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%
yfwang0798 发表于 2022-3-24 14:44
@echo off
rem set base_dir=\1
set out_folder="D:\3"
谢谢大佬
页:
[1]