这是我的代码:
xcopy "C:\Users\Me\Desktop\data\*.mtl" "C:\Users\Me\Desktop\mtl" /s /e
它的作用是从数据文件夹下的子文件夹中复制filetype .mtl的所有文件,并将其复制到桌面上的mtl文件夹,同时保留其文件夹结构。
哪个好,但我的目标是将每个子文件夹的文件选择限制为只有一个文件类型.mtl。因此,不是复制每个子文件夹中的所有.mtl文件,而是复制每个子文件夹的一个.mtl文件。
我该怎么做?
答案 0 :(得分:0)
@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
您需要更改sourcedir
和destdir
的设置以适合您的具体情况。
第一步是使用/t
的{{1}}选项创建目标子树。
将xcopy
设置为虚拟值,使用子例程source
处理文件的每一行chksubdir
。这是一个仅列表,实际上并不进行复制。
子例程检查提供的参数是否包含XCOPY /L /S
,因为\
的最后一行是计数报告。如果未找到xcopy /L
,请退出。
否则,将\
与所选文件的驱动器+路径匹配。如果这些不相等,则找到新目录,否则跳过此文件。
将source
设置为新的子目录名称,然后将source
设置为该全名减去相对根,将子目录字符串设置为相对根目录。
将它们串在一起以生成简单的sub
命令。