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
- я попытался запустить его в папку
C:destinationfolder
указать.
в папку - пробовал без какой-либо цели в выше
у меня есть скрипт, который вызывает 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.