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

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

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

<src>=C:sourcefolderabcdsomething.java и

<dest>=C:destinationfolder.

теперь xcopy копирует файл, но не создает структуру каталогов abcd внутри C:destinationfolder .

я хочу C:destinationfolderabcdsomething.java и

что я получаю это C:destinationfoldersomething.java


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

у меня есть скрипт, который вызывает xcopy итеративно, поэтому я остался с C:destinationfoldermany java files без какой-либо структуры каталогов.

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

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

C. Я не могу перейти в исходную папку abcd и работать xcopy . <dest>

6 ответов


обновление

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

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

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

Run XCOPY такой:

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

Примечание * на something*.java.


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

Я предполагаю вот что:

  • вы можете получить список файлов в текстовом файле, только с именами файлов (и optinally пути)
  • вы знаете исходную папку ("C:\sourcefolder" в вашем примере структура папок "a\b\c\d" не должна быть известна) и может использовать ее в .

вы также можете использовать следующую форму:

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 to C:\destinationfolder\oops\something.java а также любые другие матчи для something*.java под C:\sourcefolder\.


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

у вас есть C:\MyJavaStuff\A\B\C\D\something.java-это ваш источник. Ты хочешь что-то получить.java не в C:\destinationfolder, но в C:\destinationfolder\A\B\C\D -так вот оно что!--3-->цель. У тебя даже нет C:\destinationfolder - ... Это нормально, с /i будет создан весь путь.

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.