Проблема в том, что вы указываете, какой файл копировать в источнике.В этом случае xcopy не создаст структуру папок.Однако, если вы измените свой вызов на xcopy на
xcopy *.java C:\myfolder /s/y
, он также скопирует файлы .java и структуру папок.Вам нужно указать подстановочный знак, чтобы этот вызов работал так, как вы хотите.Если вы хотите копировать только определенные файлы, вам придется настроить вызов xopy, например:
xcopy something.jav* C:\myfolder /s/y
Редактировать
Вы говорите, что получаете списокфайлов для копирования из другой команды.Если вы можете вывести этот список файлов в текстовом файле, вы можете сделать следующее:
FOR /F "tokens=* delims=," %F in (d:\test\list.txt) DO xcopy src\%~nxF* .\dest /S /Y
Эта команда выполняет чтение текстового файла ("d: \ test \"list.txt "в данном случае), прочитайте каждую строку и для каждого файла запустите xcopy, добавив подстановочный знак в конце имени файла, чтобы убедиться, что он создает структуру папок.
Я предполагаю,вот что:
- Вы можете получить список файлов в текстовом файле только с именами файлов (и, опционально, с путями)
- Вы знаете исходную папку ("C:\ sourcefolder "в вашем примере, структура папок" a \ b \ c \ d "не должна быть известна) и может использоваться в команде
FOR
.
Вы также можете использоватьследующая форма:
FOR /F "tokens=* delims=," %F in ('cmd') DO xcopy src\%~nxF* .\dest /S /Y
, где cmd необходимо заменить командой, которую вы используете для создания списка файлов для копирования.
Обратите внимание, что если вы используете эту команду FOR
в командном файле, вам нужно заменить %F
на %%F
(и %~nxF*
на %%~nxF*
).