XCopy не создает структуру каталога
-
25-10-2019 - |
Вопрос
У меня есть странная проблема с 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
указав.
для целевой папки - Попробовал это без какой -либо цели выше
Есть сценарий, который у меня есть, звонит 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.