问题: 我需要从一个文件夹下面快速查找部分子文件夹,并将其复制到另一个地方
1. 提取原始文件夹下的所有目录名
在原始文件夹下打开cmd,输入以下命令,可以将所有目录名输出到列表.txt
dir/b>E:\列表.txt
dir . > a.txt 把当前目录文件列表写入a.txt。
dir . /s > a.txt 把当前目录文件列表写入a.txt,包括子目录下文件。
2. 复制文件
@echo off
for /f "delims=" %%a in (列表.txt) do (
md D:\temp\复制后
xcopy /y D:\temp\原始文件夹\%%a D:\temp\复制后\%%a\ /s/e )
md 是创建目标文件夹(当文件夹已存在时会提示)
xcopy
- /y 是指当目标文件夹中有同名文件时,不再询问是否覆盖而是直接覆盖。
- /s: 复制非空的目录和子目录。如果省略“/s”,则“xcopy”将在单个目录中工作。
- /e: 复制所有子目录,包括空目录。将“/e”与“/s”和“/t”命令行选项一起使用。
- /t: 只复制子目录结构(即目录树),不复制文件。要复制空目录,必须包含“/e”命令行选项。
- 如果命令结尾%%a后面不写斜杠\就会问是目录还是文件,写上就会直接拷贝
for循环后面的参数
- /d 查询目录
- /f 查询文件
问题2:对比两个文件夹的目录和文件,没有则富足。如果目标文件夹下缺少,则从源目录下拷贝相应文件夹至目标文件夹。list1.txt里列举了源目录下的所有子目录和文件名。
@echo off
set srcDir=D:\桌面\123\1
set destDir=D:\桌面\123\2
echo %srcDir%
echo %destDir%
for /f "delims=" %%a in (list1.txt) do (
if not exist %destDir%\%%~na xcopy /y %srcDir%\%%a %destDir%\%%a\ /s/e
)
pause