Пакетный файл для копирования файлов в одну папку

#windows #batch-file #cmd #copy #xcopy

Вопрос:

Я пытаюсь запустить летучую мышь, чтобы скопировать все файлы в list.txt. в папку назначения, не копируя папки, в которых находятся файлы, и я не могу заставить его работать правильно.

 @ECHO OFF

CHCP 65001 > NUL

FOR /F "usebackq delims=" %%I IN ("C:UsersAdminDesktopTest Copy batchList.txt") DO (
    xcopy /S "C:UsersAdminDesktopTest Copy batchSource%%I" "C:UsersAdminDesktopTest Copy batchDestination%%I*"
)

pause
 

Он читает List.txt файл для получения списка имен файлов.

Перейдите в исходную папку и выполните поиск по всем подкаталогам в поисках этих имен.

Скопируйте их и вставьте в папку назначения.

Но я хочу, чтобы скопированные файлы находились в одной единственной папке.

Ответ №1:

Позвольте другому for /F циклу вместе с where получением каждого исходного файла и используйте copy его для копирования в плоскую структуру каталогов:

 @echo off
for /F usebackq^ delims^=^ eol^= %%I in ("C:UsersAdminDesktopTest Copy batchList.txt") do (
    for /F "delims= eol=|" %%S in ('set "PATHEXT=" ^amp; 2^> nul where /R "C:UsersAdminDesktopTest Copy batchSource" "%%I"') do (
        copy "%%~S" "C:UsersAdminDesktopTest Copy batchDestination%%~nxS"
    )
)
 

PATHEXT Переменная временно очищается перед выполнением where команды, так как она будет учитывать ее и, следовательно, может дополнительно возвращать нежелательные файлы.