Скопируйте первые 10 файлов из папки и подпапок

Я пытаюсь получить первые (любые) 10 файлов из глубоко вложенной файловой структуры. я могу использовать XCOPY source dest /T /E построить структуру папок, но я хотел бы получить по 10 файлов из каждой папки и подпапки и скопировать их.

Есть ли инструмент, который сделает это для меня?

3 ответа

Ваш вопрос звучит так, как будто вы хотите первые 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 создает команду копирования и выполняет ее.

Если вам нужны только первые 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"

Я почти уверен, что вы не можете сделать это с помощью обычной команды xcopy, вам нужно будет использовать какой-то вид сценария, чтобы найти нужные вам файлы, а затем просто передать их в xcopy один за другим - тот или построить один ад строки "исключить":)

Другие вопросы по тегам