繁体   English   中英

批处理文件,仅将每个子文件夹的文件类型之一复制到另一个文件夹

[英]batch file to copy only one of filetype for each subfolder to another folder

这是我的代码:

xcopy "C:\Users\Me\Desktop\data\*.mtl" "C:\Users\Me\Desktop\mtl" /s /e

它的作用是从数据文件夹下的子文件夹复制所有文件类型.mtl的文件,然后将其复制到桌面的mtl文件夹中,同时保留其文件夹结构。

这很好,但是我的目标是将每个子文件夹的文件选择限制为.mtl文件类型之一。 因此,与其在每个子文件夹中复制所有.mtl文件,不如为每个子文件夹复制一个.mtl文件。

我怎样才能做到这一点?

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"

xcopy /T /E "%sourcedir%\*.mtl" "%destdir%\"
SET "source=:"
FOR /f "delims=" %%a IN (
 'xcopy /L /s "%sourcedir%\*.mtl" "%destdir%\" '
 ) DO (
 CALL :chksubdir "%%a"
)

GOTO :EOF

:chksubdir
ECHO "%~1"|FIND "\">NUL
IF ERRORLEVEL 1 GOTO :EOF 
IF /i "%source%"=="%~dp1" GOTO :EOF 
SET "source=%~dp1"
CALL SET "sub=%%source:%sourcedir%=%%"
COPY "%~1" "%destdir%%sub%%~nx1" >NUL 2>nul
GOTO :eof

您需要更改sourcedirdestdir的设置以适合您的情况。

第一步是使用xcopy/t选项创建目标子树。

source设置为虚拟值后,使用子例程chksubdir来处理文件的XCOPY /L /S每一行。 这是仅列表,并不实际进行复制。

该子例程检查提供的参数是否包含\\因为xcopy /L最后一行是计数报告。 如果找不到\\ ,请退出。

否则,将source匹配到所选文件的驱动器+路径。 如果这些不相等,则找到一个新目录,否则跳过此文件。

source设置为新的子目录名称,然后将sub设置为该全名减去相对根,在相对根下面给出子目录字符串。

将所有字符串串在一起以生成简单的copy命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM