Вопрос

У меня есть странная проблема с 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


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

Есть сценарий, который у меня есть, звонит xcopy итеративно, так что я остался с C:\destinationfolder\many java files без какой -либо структуры каталогов.

О. Да, я сделал xcopy /? Чтобы увидеть все варианты

B. /T также не создает никакой пустой структуры каталога

C. Я не могу перейти в папку Source a\b\c\d\ и бежать xcopy . <dest>

Это было полезно?

Решение

ОБНОВИТЬ

Я удалил свой предыдущий ответ при использовании 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.

Другие советы

Проблема в том, что вы указываете, какой файл копировать в источнике. XCopy не создаст структуры папок в этом случае. Однако, если вы измените свой звонок на XCopy на

xcopy *.java C:\myfolder /s/y

Он также скопирует файлы .java и структуру папок. Вам нужно указать подстановочный знак для этого вызова, чтобы работать так, как вы хотите. Если вы хотите скопировать только определенные файлы, вам придется настроить вызов на xpoy, например:

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, добавив подстановку в конце имени файла, чтобы убедиться Это создает структуру папки.

Я предполагаю, что здесь:

  • Вы можете получить список файлов в текстовом файле, только с именами файлов (и оптимально пути)
  • Вы знаете папку Source ("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*).

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

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

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

Чтобы получить 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\.

Мне кажется, что XCopy обычно используется для копирования деревьев каталогов, а не отдельных файлов (хотя она может работать). И XCopy воссоздает структуру каталога под а источник папка в цель папка. Если xcopy дается переключатель /i, цель Папка предполагается, что это каталог. Он будет создан, если его не существует, даже если есть несколько родителей, которые нужно создать.

У вас есть C: myjavastuff a b c d что -то. Java - это ваше источник. Анкет Вы хотите в итоге что -то с чем -то. цель. Анкет У вас даже нет C: destinationFolder. Это нормально, с /я будет создан весь путь.

xcopy /i c:\MyJavaStuff\A\B\C\D\something.java C:\destinationfolder\A\B\C\D

Если что -то. Java был единственным файлом в C: myjavastuff, вы также можете использовать

xcopy /sei c:\MyJavaStuff C:\destinationfolder

Это воссоздает всю структуру дерева, копируя ваш файл. Но если в Myjavastuff есть другие файлы (и папки), они также были бы скопированы.

Я написал очень похожий пакетный файл с помощью XCopy. Возможно, то, что я сделал, поможет вам.

Это команда, которую я использовал:

xcopy "c:\Data Files\Dave's Data\*.*"   "m:\Dave's Data"      /R/D /E/H

В этом случае данные Дейва на источнике содержат целое дерево каталогов, содержащее не менее 50 000 файлов и превышающие 75 ГБ данных. Он отлично работает на Windows XP

я нашел /T был ненужным, так как дерево каталогов копируется. Я также нашел /S был ненужным, как /E скопированные каталоги и подзадачи, включая пустые. я включен /R скопировать и перезаписать только файлы прочтения в пункте назначения. /H скопированные скрытые каталоги. /D скопировали только новые файлы. Я использую это как инструмент для повседневного резервного копирования для моих данных.

Единственная проблема, с которой у меня есть, в то время как эта команда будет работать на Windows 7 в первый раз, она не будет работать при последующих запусках, когда существует дерево каталогов назначения. Я подозреваю, что это связано с проблемой привилегий, поскольку команда XCopy будет работать над последующими запусками в Windows 7 в окне CMD.Exe.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top