Подтвердить что ты не робот

Xcopy не создает структуру каталогов

У меня странная проблема с xcopy в Windows XP Professional. Я не знаю, является ли его глупым вопросом, поскольку я указываю только файл как источник, так что я должен ожидать какого-либо другого поведения? Это он:

Я использую xcopy <src> <dest> /s/y.

<src>=C:\sourcefolder\a\b\c\d\something.java и

<dest>=C:\destinationfolder.

Теперь xcopy копирует файл, но не создает структуру каталогов \a\b\c\d\ внутри C:\destinationfolder.

я хочу C:\destinationfolder\a\b\c\d\something.java и

я получаю C:\destinationfolder\something.java


  • Я попытался запустить его в целевой папке C:\destinationfolder, указав . для целевой папки
  • Пробовал это без какой-либо цели выше.

Существует script, который вызывает xcopy итеративно, поэтому я остаюсь с C:\destinationfolder\many java files без какой-либо структуры каталогов.

а. Да, я сделал xcopy /?, чтобы увидеть все параметры

В. /T также не создает пустую структуру каталогов

С. Я не могу перейти в исходную папку a\b\c\d\ и запустить xcopy . <dest>

4b9b3361

Ответ 1

UPDATE

Я удалил свой предыдущий ответ при использовании ROBOCOPY. Я считаю, что следующее будет делать то, что вы хотите, используя XCOPY.

Предполагая, что структура вашей папки выглядит следующим образом:

SOURCE = C:\MyJavaStuff\A\B\C\D\something.java
DEST   = C:\MyDestination

Запустите XCOPY следующим образом:

XCOPY C:\MyJavaStuff\something*.java C:\MyDestination /S /E

Обратите внимание на * в something*.java.

Ответ 2

Проблема заключается в том, что вы указываете, какой файл нужно скопировать в источнике. В этом случае 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*).

Ответ 3

Я посмотрел на xcopy-переключатели, и вы можете скопировать структуру каталогов с помощью /T, хотя это не копирует пустые каталоги, вы можете переопределить это с помощью /E. Итак, ваша команда будет выглядеть так:

xcopy C:\sourcefolder\a\b\c\d\something.java C:\destinationfolder /T /E /S /Y

Надеюсь, это поможет!

Ответ 4

Чтобы получить C:\destinationfolder\a\b\c\d\something.java, XCOPY должен знать, сколько дубликатов C:\sourcefolder\a\b\c\d\something.java.

Вы можете использовать:

C:
cd \sourcefolder
XCOPY something.java* C:\destinationfolder\ /S

Просто помните, что это может иметь побочный эффект от копирования C:\sourcefolder\oops\something.java на C:\destinationfolder\oops\something.java, а также любых других совпадений для something*.java в разделе C:\sourcefolder\.