从文件夹及其子文件夹中复制前 10 个文件

从文件夹及其子文件夹中复制前 10 个文件

我正在尝试从深度嵌套的文件结构中获取前 10 个文件(任意)。我可以用来XCOPY source dest /T /E构建文件夹结构,但我想做的是从每个文件夹和子文件夹中获取 10 个文件并复制它们。

是否有一个工具可以帮我完成这个任务?

答案1

你的问题听起来像是你想要前 10 个文件每一个子文件夹?这应该可以做到(未经详尽测试!):

echo off
xcopy /Y %1 %2 /T /E

dir %1 /b /s /A:D >tempfolderlist.txt

for /f "tokens=1 delims=¬" %%a in (./tempfolderlist.txt) do (

    dir "%%a" /b /A:-D >tempfilelist.txt

    setlocal enabledelayedexpansion

    set counter=0

    for /f "tokens=1 delims=¬" %%b in (./tempfilelist.txt) do (

        IF !counter! LSS 10 call :docopy %1 "%%a\%%b" %2
        set /a counter+=1

    )

    endlocal
)

del /q tempfolderlist.txt
del /q tempfilelist.txt
GOTO:EOF

:docopy
set sourcePath=%~1
set sourceFile=%~2
set targetPath=%~3
set sourceNoDrive=%sourceFile:~3,5000%
set sourcePathNoDrive=%sourcePath:~3,5000%
set sourceNoDrive=!sourceNoDrive:%sourcePathNoDrive%\=!

copy "%sourceFile%" "%targetPath%\%sourceNoDrive%" >> out.txt

GOTO:EOF

如果它保存到名为“first10.cmd”的批处理文件中,则可以像这样使用它:

first10.cmd "C:\Temp\SourcePath" "C:\Temp\DestPath"

首先,它使用 xcopy 准备目标文件夹结构,就像您的问题一样。然后我们将所有文件夹的列表保存到一个文件中,并循环遍历每个文件夹。对于每个文件夹,我们保存该文件夹中所有文件的列表,并循环遍历每个文件。对于每个文件,:docopy构建复制命令并执行它。

答案2

如果你只想要整个结构中的前 10 个文件,你可以使用这个(沉重借用了欧文的回答!)

@echo off

mkdir %2

dir %1 /b /s /A:-D >tempfilelist.txt

setlocal enabledelayedexpansion

set counter=0

for /f "tokens=1 delims=¬" %%b in (./tempfilelist.txt) do (

    IF !counter! LSS 10 call :docopy "%%b" %2
    set /a counter+=1
)

endlocal
)

del /q tempfilelist.txt
GOTO:EOF

:docopy
copy %1 %2

GOTO:EOF

使用方式如下:

mybatchfilename.bat "C:\Source" "C:\Target"

答案3

我几乎可以肯定你不能使用常规的 xcopy 命令来做到这一点,你将不得不使用某种形式的脚本来找到你真正想要的文件,然后将它们逐个传递给 xcopy - 或者构建一个“排除”字符串:)

相关内容