批处理文件,用于将某些子目录中的某些文件类型复制到一个文件夹

时间:2017-10-17 20:58:06

标签: batch-file copy

希望在"开发"中复制扩展名为* .cpp的所有文件。子文件夹到新目录。

例如,C:\ source有10个名为A1到A10的文件夹。每个A文件夹都有子文件夹,如开发,待处理,已发布。我想从所有开发子文件夹中提取所有* .cpp并放在C:\ destination。

示例C:\ source \ A1 \ development \ folder包含文件one.cpp C:\ source \ A1 \ released \文件夹包含two.cpp

我只想要包含开发名称的路径中的文件* .cpp。 因此,在此示例中,只应将one.cpp复制到newfolder

我可以从cmd提示符中命名这些文件: dir / s / b * .cpp | findstr / i / m" development" > outfile.txt

(注意上面的dir命令只搜索文件名,而不搜索文件的内容!)

猜猜我可以带outfile.txt并运行另一个批处理文件

Batch script to copy files listed in text file from a folder and its subfolders to a new location

然而,必须有更简单的方法。

BTW:

DOS Batch file to copy certain file types from subdirectories to one folder with rename

不允许限制子文件夹。

1 个答案:

答案 0 :(得分:1)

来自here

但确实需要从批处理文件中运行。

for /f "delims=" %%A in ('findstr /i /M "glossary" *.txt') do copy "%%A" C:\destination

编辑:

不需要findtr只是文件名,所以我使用了你的初始目录搜索,并将它与for语句结合起来。适合我:)

for /f "delims=" %%A in ('dir /s /b *development*.cpp') do copy "%%A" C:\destination

EDIT2:

是的,所以这应该是它,现在for语句以dir中的文件夹作为变量运行。注意:它确实会产生误报,您可以使用if exists语句过滤掉,但我相信您可以自己试验一下:

for /f "tokens=*" %%D in ('dir /b /s /a:d "C:\source\*"') do copy %%D\development\*.cpp C:\destination

EDIT3:

如果您想在神秘目录中找到几个.cpp:)

for /f "tokens=*" %%D in ('dir /b /s /a:d "C:\source\*"') do (for /f "delims=" %%A in ('dir /s /b "%%D\development\*.cpp"') do copy "%%A" C:\destination)