I am using XCOPY in a post-build event to copy compiled DLLs from their output folders to the main app’s output folder. The DLLs are being copied to a «Modules» subfolder in the main app output folder, like this:
xcopy "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell$(OutDir)Modules"
The command works fine if the Modules folder exists, but I have discovered during testing that if the folder doesn’t exist, XCOPY doesn’t create it, and the command fails.
Is there an XCOPY switch that will cause the folder to be created if it doesn’t exist? If not, what would I add to my post-build event to create the folder if it doesn’t exist? Thanks for your help.
Roman
19.2k6 gold badges66 silver badges83 bronze badges
asked Mar 3, 2011 at 2:00
David VeenemanDavid Veeneman
18.7k32 gold badges119 silver badges187 bronze badges
1
Answer to use «/I» is working but with little trick — in target you must end with character to tell xcopy that target is directory and not file!
Example:
xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)_DropFolder" /F /R /Y /I
does not work and return code 2, but this one:
xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)_DropFolder" /F /R /Y /I
Command line arguments used in my sample:
/F — Displays full source & target file names
/R — This will overwrite read-only files
/Y — Suppresses prompting to overwrite an existing file(s)
/I — Assumes that destination is directory (but must ends with )
answered Mar 27, 2012 at 15:44
4
I tried this on the command line using
D:>xcopy myfile.dat xcopytesttest
and the target directory was properly created.
If not you can create the target dir using the mkdir command with cmd‘s command extensions enabled like
cmd /x /c mkdir "$(SolutionDir)Prism4Demo.Shell$(OutDir)Modules"
(‘/x’ enables command extensions in case they’re not enabled by default on your system, I’m not that familiar with cmd)
use
cmd /?
mkdir /?
xcopy /?
for further information 
jamessan
40.9k8 gold badges84 silver badges85 bronze badges
answered Mar 3, 2011 at 2:11
MartinStettnerMartinStettner
28.5k15 gold badges78 silver badges106 bronze badges
3
I hate the PostBuild step, it allows for too much stuff to happen outside of the build tool’s purview. I believe that its better to let MSBuild manage the copy process, and do the updating. You can edit the .csproj file like this:
<Target Name="AfterBuild" Inputs="$(TargetPath)**">
<Copy SourceFiles="$(TargetPath)**" DestinationFiles="$(SolutionDir)Prism4Demo.Shell$(OutDir)Modules**" OverwriteReadOnlyFiles="true"></Copy>
</Target>
answered Mar 3, 2011 at 2:11
Ritch MeltonRitch Melton
11.4k4 gold badges40 silver badges53 bronze badges
5
Use the /i with xcopy and if the directory doesn’t exist it will create the directory
for you.
answered May 7, 2011 at 3:18
GeekyGuyGeekyGuy
1511 silver badge2 bronze badges
You could use robocopy:
robocopy "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell$(OutDir)Modules" /E
answered Mar 3, 2011 at 2:20
John SimonsJohn Simons
4,28822 silver badges39 bronze badges
4
Simple short answer is this:
xcopy /Y /I "$(SolutionDir)<my-src-path>" "$(SolutionDir)<my-dst-path>"
answered Mar 8, 2019 at 19:02
zezba9000zezba9000
3,2071 gold badge28 silver badges51 bronze badges
Simply type in quotes slash delimiter «/» and add to final destination 2 back-slashes «\»
It’s will be create New folders to copy and copy need file(-s).
xcopy ".myfile" "....folder1/folder2/destination\"
answered Jul 28, 2021 at 14:13
RedeeRedee
5375 silver badges8 bronze badges
I tried this on the command.it is working for me.
if "$(OutDir)"=="binDebug" goto Visual
:TFSBuild
goto exit
:Visual
xcopy /y "$(TargetPath)$(TargetName).dll" "$(ProjectDir)..Demo"
xcopy /y "$(TargetDir)$(TargetName).pdb" "$(ProjectDir)..Demo"
goto exit
:exit
cfnerd
3,53812 gold badges32 silver badges44 bronze badges
answered Mar 30, 2018 at 11:32
Ankit MoriAnkit Mori
66513 silver badges22 bronze badges
Try /E
To get a full list of options: xcopy /?
answered Mar 3, 2011 at 2:04
Steve WellensSteve Wellens
20.4k2 gold badges27 silver badges69 bronze badges
1
Как в Windows 10 удалить файлы, но оставить структуру папок
Создавать папки нетрудно, однако, если у вас имеется сложная структура каталогов, из которой нужно удалить все файлы, вряд ли вы захотите создавать ее заново, удалив ее перед этим вместе с файлами. Впрочем, удалить все файлы, сохранив при этом структуру директорий очень даже просто, причем сделать это можно как минимум тремя путями. Первый способ предполагает копирование имеющейся структуры с игнорированием ее содержимого.
Копирование структуры
Воспользуемся для этих целей встроенной консольной утилитой XCOPY. Предположим, что у нас есть папка Data с вложенными каталогами, в которых содержаться некие файлы, которые нужно удалить.
Создав пустую папку Data в другом месте, открываем PowerShell или командную строку и выполняем команду XCOPY «путь-к-папке-с-файлами «путь-к-пустой-папке» /T /E .
В результате в пустой каталог Data будет скопировано дерево папок первой папки Data , но уже без файлов. Естественно, первую папку можно удалить.
С помощью Total Commander
Если у вас есть файловый менеджер Total Commander, используем встроенную функцию вывода содержимого без каталогов.
Зайдите в программе в каталог с содержимым и нажмите Ctrl + B .
В результате все содержащиеся в нём файлы, в том числе те, которые находятся во вложенных каталогах, будут выведены в панели файлового менеджера. Готово, теперь вам останется их только выделить и удалить.
Папки при этом останутся на месте.
Рекурсивным методом в PowerShell
Почистить папки от файлов можно и с помощью PowerShell .
Для этого в запущенной консоли выполняем команду:
Get-ChildItem -Path «путь-к-папке» -Include *.* -File -Recurse | foreach
Этой командой мы рекурсивно проходим по каталогам, получаем список файлов и удаляем их. Удалены, однако, будут только те файлы, которые имеют расширение или точку в имени.
Приведенная здесь команда тем хороша, что позволяет удалять файлы по маске. Так, добавив к точке расширение TXT (*.txt*) , вы удалите только текстовые файлы с данным расширением. Но есть у нее и свой недостаток, — все файлы удаляются мимо Корзины, поэтому перед очисткой каталогов всё же рекомендуется создавать их резервные копии.
Как правильно скопировать файлы и папки исключая некоторые из них
Автор оригинального топика предлагает решить задачу в лоб — а именно, скопировать все файлы а потом удалить не нужные. Это может быть неплохим решением, если вам, конечно, не нужно скопировать всю домашнюю папку на флешку, за исключением вашей коллекции видео.
Но главная проблема этого подхода в другом — он не соответствует идеологии unix: сложные задачи решаются комбинацией простых утилит.
Под катом подробности о методах решения этого класса задач — не рассматривайте это как готовый рецепт.
0. Декомпозиция
Решение любой комплексной задачи начинается с разбора её на составные части. Итак нам нужно скопировать некоторый набор файлов предварительно его отфильтровав.
Значит — получение списка файлов, фильтрация, копирование.
1. Получение списка файлов
Обычно мы просматриваем список файлов программой ls. Её вывод выглядит примерно так:
Подходит ли там такой вывод? Нет, потому, что в нем недостаточно информации — нам нужно копировать файлы рекурсивно, значит для нас было-бы гораздо удобнее если первая в нашей цепочке программа выдала там имена файлов вместе с путями.
Следующая программа, которая приходит на ум — find
Уже лучше но в вывод попали и директории, а они нам не нужны. Попробуем так:
Вот то, что там нужно. Список файлов.
2. Фильтрация
Этот список файлов нужно отфильтровать. Перенаправим вывод нашей предыдущей комманды в программу grep.
Хорошо, но в условиях задачи стоит исключать файлы, так что немного поменеяем наш конвейер
Первые две части выполнены.
3. Копирование
Из man-страницы для команды cp мы можем узнать, что исходный файл нужно передавать программе cp в качестве аргумента, а мы пока можем только перенаправить список на стандартный ввод.
Применим утилиту xargs — она принимает стандартный ввод и вызывает указанную программу с параметрами из стандартного ввода. Итак:
-n 1 значит, что только одна строка из стандартного ввода подставляется в комманду, а -I % — определяет символ, который будет заменен в целевой комманде на строчку из стандартного ввода. В нашем случае это будет
Можно считать, что задача решена.
Вместо заключения
Я надеюсь что это описание поможет правильно подходить к решению как таких простых так и более комплексных задач.
xcopy
В разделе Примеры показан принцип использования этой команды.
Синтаксис
Параметры
| Параметр | Описание |
|---|---|
| <Source> | Обязательный. Указывает расположение и имена файлов, которые необходимо скопировать. Этот параметр должен содержать либо диск, либо путь. |
| [ < Назначение > ] | Указывает назначение файлов, которые необходимо скопировать. Этот параметр может включать букву диска и двоеточие, имя каталога, имя файла или их сочетание. |
| /W | Отображает следующее сообщение и ждет ответа перед началом копирования: файлов. |
| /p | Запрос на подтверждение создания каждого целевого файла. |
| /C | Игнорирует ошибки. |
| /v | Проверяет каждый файл по мере его занесения в целевой файл, чтобы убедиться, что файлы назначения идентичны исходным файлам. |
| /q | Подавляет отображение сообщений xcopy . |
| /f | Отображает имена исходных и целевых файлов при копировании. |
| /l | Отображает список копируемых файлов. |
| /g | Создает расшифрованные файлы назначения , если назначение не поддерживает шифрование. |
| /d [: мм-дд-гггг] | Копирует исходные файлы, измененные только в указанную дату или после нее. Если не включить значение mm-дд-гггг , команда xcopy скопирует все исходные файлы, которые новее существующих файлов назначения . Этот параметр командной строки позволяет обновлять измененные файлы. |
| /U | Копирует файлы из источника , который существует только в месте назначения . |
| /i | Если Source является каталогом или содержит подстановочные знаки, а назначение не существует, команда xcopy предполагает, что в поле назначение указано имя каталога и создается новый каталог. Затем команда xcopy копирует все указанные файлы в новый каталог. По умолчанию команда xcopy предложит указать, является ли назначение файлом или каталогом. |
| /s | Копирует каталоги и подкаталоги, если они не пусты. Если параметр /sопущен, то команда xcopy работает в одном каталоге. |
| /e | Копирует все подкаталоги, даже если они пусты. Используйте параметр /e с параметрами командной строки /s и /t . |
| /t | Копирует структуру подкаталога (то есть только дерево), а не файлов. Чтобы скопировать пустые каталоги, необходимо включить параметр командной строки /e . |
| /k | Копирует файлы и оставляет атрибут только для чтения в целевых файлах, если они есть в исходных файлах. По умолчанию xcopy удаляет атрибут «только для чтения». |
| /r | Копирует файлы, которые доступны только для чтения. |
| /h | Копирует файлы с атрибутами скрытых и системных файлов. По умолчанию команда xcopy не копирует скрытые или системные файлы. |
| /a | Копирует только исходные файлы, для которых заданы атрибуты файла архива. /a не изменяет атрибут файла архива исходного файла. Сведения о том, как задать атрибут файла архива с помощью attrib, см. в разделе Дополнительные ссылки. |
| /m | Копирует исходные файлы, для которых заданы атрибуты файла архива. В отличие от /a, /m отключает атрибуты файлов архива в файлах, указанных в источнике. Сведения о том, как задать атрибут файла архива с помощью attrib, см. в разделе Дополнительные ссылки. |
| /n | Создает копии, используя короткие имена файлов или каталогов NTFS. /n требуется при копировании файлов или каталогов с тома NTFS в том FAT или при использовании соглашения об именовании файловой системы FAT (то есть 8,3 символов) в целевой файловой системе. В качестве целевой файловой системы можно использовать файловую систему FAT или NTFS. |
| /o | Копирует владение файлом и сведения о списке управления доступом на уровне пользователей (DACL). |
| /x | Копирует параметры аудита файлов и сведения о системном списке управления доступом (SACL) (подразумевается /o). |
| /exclude: имя_файла1 [+ [Имя_файла2]] [+ [FileName3] ()] | Указывает список файлов. Необходимо указать хотя бы один файл. Каждый файл будет содержать строки поиска с каждой строкой в отдельной строке файла. Если любая из строк соответствует любой части абсолютного пути к копируемому файлу, этот файл будет исключен из копирования. Например, при указании строкового obj -файла будут исключены все файлы, расположенные в каталоге obj , или все файлы с расширением obj . |
| /y | Подавляет запрос на подтверждение перезаписи существующего целевого файла. |
| /-и | Запрос на подтверждение перезаписи существующего целевого файла. |
| /z | Выполняет копирование по сети в перезапускаемом режиме. |
| /b | Копирует символьную ссылку вместо файлов. этот параметр появился в Windows Vista®. |
| /j | Копирует файлы без буферизации. Рекомендуется для очень больших файлов. этот параметр был добавлен в Windows Server 2008 R2. |
| /? | Отображение справки в командной строке. |
Комментарии
Использование /z
Если вы потеряли подключение на этапе копирования (например, если сервер переходит в режим «вне сети»), то после повторного подключения Подключение возобновится. /z также отображает процент выполнения операции копирования для каждого файла.
Использование /y в переменной среды копикмд.
В переменной среды КОПИКМД можно использовать параметр /y . Эту команду можно переопределить с помощью /-и в командной строке. По умолчанию выводится запрос на перезапись.
Копирование зашифрованных файлов
Копирование зашифрованных файлов на том, который не поддерживает EFS, приводит к ошибке. Сначала расшифровать файлы или скопировать их на том, который поддерживает EFS.
Чтобы добавить файлы, укажите один файл для назначения, но несколько файлов для источника (то есть с помощью подстановочных знаков или формата file1 + file2 + файл3).
Значение по умолчанию для назначения
Если опустить назначение, команда xcopy скопирует файлы в текущий каталог.
Указание того, является ли назначение файлом или каталогом
Если объект Destination не содержит существующий каталог и не заканчивается обратной косой чертой (), появляется следующее сообщение:
Нажмите клавишу F, если хотите скопировать файл или файлы в файл. Нажмите клавишу D, если хотите скопировать файл или файлы в каталог.
Это сообщение можно отключить с помощью параметра командной строки /i , в результате чего команда xcopy предполагает, что назначение является каталогом, если источником является более одного файла или каталога.
Использование команды xcopy для установки атрибута архива для целевых файлов
Команда xcopy создает файлы с установленным атрибутом Archive, независимо от того, был ли этот атрибут задан в исходном файле. Дополнительные сведения об атрибутах файлов и attribсм. в разделе Дополнительные ссылки.
Сравнение xcopy и diskcopy
Если у вас есть диск, содержащий файлы в подкаталогах, и вы хотите скопировать его на диск, имеющий другой формат, используйте команду xcopy вместо команды diskcopy. Так как команда diskcopy копирует диски по дорожке, исходный и целевой диски должны иметь одинаковый формат. Команда xcopy не имеет этого требования. Используйте xcopy , если вам не нужна полная копия образа диска.
Коды выхода для команды xcopy
Для обработки кодов завершения, возвращаемых xcopy, используйте параметр ERRORLEVEL в командной строке If в пакетной программе. Пример пакетной программы, обрабатывающей коды завершения с помощью If, см. в разделе Дополнительные ссылки. В следующей таблице перечислены все коды выхода и их описание.
Примеры
1. чтобы скопировать все файлы и подкаталоги (включая все пустые подкаталоги) с диска A на диск B, введите:
2. чтобы включить в предыдущий пример все системные или скрытые файлы, добавьте параметр командной строки/h следующим образом:
3. чтобы обновить файлы в каталоге репортс с файлами в каталоге равдата, которые были изменены с 29 декабря 1993 г., введите:
4. чтобы обновить все файлы, существующие в репортс в предыдущем примере, независимо от даты, введите:
5. чтобы получить список файлов для копирования с помощью предыдущей команды (т. е. без фактического копирования файлов), введите:
Файл xcopy. out содержит список всех копируемых файлов.
6. чтобы скопировать каталог кустомер и все подкаталоги в каталог \публикаддресс на сетевом диске H:, оставьте атрибут «только для чтения» и при создании нового файла в H: введите:
7. чтобы выполнить предыдущую команду, убедитесь, что команда xcopy создает каталог аддресс, если он не существует, и подавление сообщения, отображаемого при создании нового каталога, добавьте параметр командной строки /i следующим образом:
8. можно создать пакетную программу для выполнения операций xcopy и использовать пакет If для обработки кода выхода при возникновении ошибки. Например, в следующей пакетной программе для параметров источника и назначения xcopy используются заменяемые параметры:
Чтобы использовать предыдущую пакетную программу для копирования всех файлов в каталоге К:пргмкоде и его подкаталогов на диск B, введите:
Интерпретатор команд подставляет к:пргмкоде для %1 и B: для %2, затем использует xcopy с параметрами командной строки /e и /s . Если при работе команды xcopy возникает ошибка, пакетная программа считывает код выхода и переходит к метке, указанной в соответствующей инструкции If ERRORLEVEL , а затем отображает соответствующее сообщение и завершает работу из пакетной программы.
9. в этом примере копируются все непустые каталоги, а также файлы, имя которых соответствует шаблону, заданному с помощью символа звездочки.
В предыдущем примере это конкретное значение исходного параметра .ток *. yml копирует те же три файла, даже если их два символа пути . были удалены. Однако файлы не копируются, если из исходного параметра был удален подстановочный знак «звездочка», что делает его просто .ток.ИМЛ.
Original answer
Remove the ending backslash from the source folder path
C:WindowsSystem32xcopy.exe /Y "C:UsersRyanDesktopmmars_pub" "C:UsersRyanDesktopDropboxMMARSmmars_pub"
edited 2015/10/01
While the original question used a literal path, and the indicated solution will solve the problem, there is another option. For literal paths and in cases where the path is inside a variable and could (or not) end in a backslash, it is enough to ensure that the ending backslash (if present) is separated from the quote, including an ending dot.
xcopy /y "x:source." "x:target"
xcopy /y "%myVariable%." "x:target"
This ending dot will not interfere in files/folders names. If there is and ending backslash, the additional dot will simply refer to the same folder. If there is not ending backslash as in windows files and folders can not end their names with a dot, it will be discarded.
BUT if the output of the xcopy command will be processed, remember that this additional dot will be included in the paths shown.
note: The solutions are above the line. Keep reading if interested on why/where there is a problem.
Why xcopy "c:source" "d:target" fails but xcopy "c:source" "d:target" works?
Both commands seems to have valid path references, and … YES! both are valid path references, but there are two elements that work together to make the command fail:
- the folder reference is quoted (note: it should be quoted, it is a good habit to quote paths as you never know when they will contain spaces or special characters)
xcopyis not an internal command handled bycmdbut an executable file
As xcopy is an external command, its arguments are not handled following the cmd parser command line logic. They are handled by the Microsoft C startup code.
This parser follows two sets of rules, official rules
Arguments are delimited by white space, which is either a space or a tab.
A string surrounded by double quotation marks is interpreted as a single argument, regardless of white space contained within. A quoted
string can be embedded in an argument. Note that the caret (^) is not
recognized as an escape character or delimiter.A double quotation mark preceded by a backslash,
", is interpreted as a literal double quotation mark (").Backslashes are interpreted literally, unless they immediately precede a double quotation mark.
If an even number of backslashes is followed by a double quotation mark, then one backslash (
) is placed in the argv array for every
pair of backslashes (\), and the double quotation mark (") is
interpreted as a string delimiter.If an odd number of backslashes is followed by a double quotation mark, then one backslash (
) is placed in the argv array for every
pair of backslashes (\) and the double quotation mark is interpreted
as an escape sequence by the remaining backslash, causing a literal
double quotation mark (") to be placed in argv.
and undocumented/non official rules (How Command Line Parameters Are Parsed)
- Outside a double quoted block a
"starts a double quoted block.- Inside a double quoted block a
"followed by a different character (not another") ends the double quoted block.- Inside a double quoted block a
"followed immediately by another"(i.e."") causes a single"to be added to the output, and the
double quoted block continues.
This parser sees the sequence " found at the end of the «first» argument as a escaped quote that does not end/closes the argument, it is seen as part or the argument. And the «starting» quote of the «second» argument is just ending the double quoted block BUT not ending the argument, remember that arguments are delimited by white space.
So while it seems that the command line arguments are
v v v......argument delimiters
v.........v v..........v ......quoted blocks
xcopy "x:souce" "x:target"
^.......^ ^........^ ......argument data
arg #1 arg #2
arg #1 = x:source
arg #2 = x:target
the actual argument handled by xcopy is
v v .....argument delimiters
v......................v .....quoted block
xcopy "x:souce" "x:target"
^.....................^ .....argument data
arg #1
arg #1 = x:source" x:target"
When the ending backslash is removed or the additional dot included, the closing quote in the argument will not be escaped, it will close the quoted block and the space between arguments will be seen as a delimiter.
Original answer
Remove the ending backslash from the source folder path
C:WindowsSystem32xcopy.exe /Y "C:UsersRyanDesktopmmars_pub" "C:UsersRyanDesktopDropboxMMARSmmars_pub"
edited 2015/10/01
While the original question used a literal path, and the indicated solution will solve the problem, there is another option. For literal paths and in cases where the path is inside a variable and could (or not) end in a backslash, it is enough to ensure that the ending backslash (if present) is separated from the quote, including an ending dot.
xcopy /y "x:source." "x:target"
xcopy /y "%myVariable%." "x:target"
This ending dot will not interfere in files/folders names. If there is and ending backslash, the additional dot will simply refer to the same folder. If there is not ending backslash as in windows files and folders can not end their names with a dot, it will be discarded.
BUT if the output of the xcopy command will be processed, remember that this additional dot will be included in the paths shown.
note: The solutions are above the line. Keep reading if interested on why/where there is a problem.
Why xcopy "c:source" "d:target" fails but xcopy "c:source" "d:target" works?
Both commands seems to have valid path references, and … YES! both are valid path references, but there are two elements that work together to make the command fail:
- the folder reference is quoted (note: it should be quoted, it is a good habit to quote paths as you never know when they will contain spaces or special characters)
xcopyis not an internal command handled bycmdbut an executable file
As xcopy is an external command, its arguments are not handled following the cmd parser command line logic. They are handled by the Microsoft C startup code.
This parser follows two sets of rules, official rules
Arguments are delimited by white space, which is either a space or a tab.
A string surrounded by double quotation marks is interpreted as a single argument, regardless of white space contained within. A quoted
string can be embedded in an argument. Note that the caret (^) is not
recognized as an escape character or delimiter.A double quotation mark preceded by a backslash,
", is interpreted as a literal double quotation mark (").Backslashes are interpreted literally, unless they immediately precede a double quotation mark.
If an even number of backslashes is followed by a double quotation mark, then one backslash (
) is placed in the argv array for every
pair of backslashes (\), and the double quotation mark (") is
interpreted as a string delimiter.If an odd number of backslashes is followed by a double quotation mark, then one backslash (
) is placed in the argv array for every
pair of backslashes (\) and the double quotation mark is interpreted
as an escape sequence by the remaining backslash, causing a literal
double quotation mark (") to be placed in argv.
and undocumented/non official rules (How Command Line Parameters Are Parsed)
- Outside a double quoted block a
"starts a double quoted block.- Inside a double quoted block a
"followed by a different character (not another") ends the double quoted block.- Inside a double quoted block a
"followed immediately by another"(i.e."") causes a single"to be added to the output, and the
double quoted block continues.
This parser sees the sequence " found at the end of the «first» argument as a escaped quote that does not end/closes the argument, it is seen as part or the argument. And the «starting» quote of the «second» argument is just ending the double quoted block BUT not ending the argument, remember that arguments are delimited by white space.
So while it seems that the command line arguments are
v v v......argument delimiters
v.........v v..........v ......quoted blocks
xcopy "x:souce" "x:target"
^.......^ ^........^ ......argument data
arg #1 arg #2
arg #1 = x:source
arg #2 = x:target
the actual argument handled by xcopy is
v v .....argument delimiters
v......................v .....quoted block
xcopy "x:souce" "x:target"
^.....................^ .....argument data
arg #1
arg #1 = x:source" x:target"
When the ending backslash is removed or the additional dot included, the closing quote in the argument will not be escaped, it will close the quoted block and the space between arguments will be seen as a delimiter.
- 29.01.2020
- 44 353
- 5
- 02.11.2020
- 26
- 24
- 2
- Содержание статьи
- Описание
- Синтаксис
- Параметры
- Примечания
- Примеры использования
- Справочная информация
- Комментарии к статье ( 5 шт )
- Добавить комментарий
Описание
XCOPY — Копирует файлы и каталоги, включая подкаталоги.
Синтаксис
xcopy источник [результат] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:мм-дд-гггг]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [{/a|/m}] [/n] [/o] [/x] [/exclude:файл1[+[файл2]][+[файл3]] [{/y|/-y}] [/z]
Параметры
| Параметр | Описание |
|---|---|
| источник | Обязательный параметр. Задает местонахождение и имена файлов для копирования. Параметр должен задавать или диск, или путь. |
| результат | Задает место, куда будут скопированы файлы. Параметр может включать имя диска с двоеточием, имя каталога, имя файла или их комбинацию. |
| /w | Выводит следующее сообщение с ожиданием подтверждения начала копирования: Нажмите любую клавишу, чтобы начать копирование файлов |
| /p | Запрашивает подтверждение при создании каждого файла-результата. |
| /c | Игнорирует ошибки. |
| /v | Проверяет каждый скопированный файл на соответствие его оригиналу. |
| /q | Отменяет вывод на экран сообщений команды xcopy. |
| /f | Выводит имена исходных файлов и файлов-результатов в процессе копирования. |
| /l | Отображает список копируемых файлов. |
| /g | Создает незашифрованные файлы-результаты. |
| /d[:мм-дд-гггг] | Копирует только файлы, измененные не ранее заданной даты. Если не включить значение мм-дд-гггг, команда xcopy копирует все файлы-источники, которые новее существующих файлов-результатов. Эта возможность позволяет обновлять только измененные файлы. |
| /u | Копирует (обновляет) только те файлы-источники, которые уже существуют в каталоге результата. |
| /i | Если источником является каталог или источник содержит подстановочные знаки и результат не существует, команда xcopy считает, что результат — это имя каталога, и создает новый каталог. Затем xcopy копирует все указанные файлы в новый каталог. По умолчанию команда xcopy запрашивает подтверждение, является ли параметр результат каталогом или файлом. |
| /s | Копирует каталоги и подкаталоги, если они не пусты. Если параметр /s не задан, команда xcopy будет работать только с одним каталогом. |
| /e | Копирует все подкаталоги, включая пустые. Параметр /e используется с параметрами /s и /t. /t Копирует только структуру подкаталога (т. е. дерево), а не файлы. Для копирования пустых каталогов следует задать ключ /e. |
| /k | Копирует файлы с атрибутом «только для чтения» с сохранением этого атрибута для скопированных файлов, оригиналы которых имеют этот атрибут. По умолчанию команда xcopy удаляет атрибут «только для чтения». |
| /r | Копирует файлы с атрибутом «только для чтения». |
| /h | Копирует системные и скрытые файлы. По умолчанию команда xcopy не копирует системные и скрытые файлы. |
| /a | Копирует только те файлы, которые имеют установленный атрибут «архивный». При использовании параметра /a атрибут «архивный» у исходных файлов не меняется. |
| /m | Копирует только те файлы, которые имеют установленный атрибут «архивный». В отличие от параметра /a, параметр /m очищает атрибут «архивный» у скопированных файлов. |
| /n | Копирует с использованием коротких имен файловой системы NTFS. Параметр /n требуется при копировании из файловой системы NTFS в файловую систему FAT или когда на диске-результате требуется использование соглашения об именах файлов как в файловой системе FAT (8.3). Файлы могут записываться в файловую систему FAT или NTFS. |
| /o | Копирует сведения о принадлежности файлов и избирательной таблице управления доступом (DACL). |
| /x | Копирует сведения о параметрах аудита файла и системной таблице управления доступом (SACL) (подразумевается наличие /p). /exclude:файл1[+[файл2]][+[файл3]] Определяет список файлов, содержащих строки. |
| /y | Устраняет выдачу запроса на подтверждение перезаписи существующего конечного файла. |
| /-y | Выдает запрос на подтверждение перезаписи существующего конечного файла. |
| /z | Копирует по сети в режиме перезапуска. |
| /? | Отображает справку в командной строке. |
Примечания
-
- Использование параметра /exclude
Построчный вывод всех строк в каждом файле. При соответствии выведенной строки части пути копируемого файла, он исключается из процесса копирования. Например, если указана строка «Obj», исключается все файлы, расположенные в каталоге «Obj». Например, если указана строка «.obj», исключается все файлы с расширением .obj. - Использование параметра /z
Если во время фазы копирования теряется сетевое подключение (например, если сервер переходит автономный режим, разрывая подключение), копирование возобновляется после восстановления подключения. Использование параметра /z команды вызывает также отображение доли (в процентах) завершенной операции копирования для каждого файла. - Использование параметра /y в переменной среде COPYCMD. Можно применять параметр /y в переменной среде COPYCMD. Эта настройка может быть переопределена использованием параметра /-y в командной строке. По умолчанию если команда copy выполняется не в пакетной программе, при замене требуется подтверждение.
- Копирование зашифрованных файлов
При копировании файлов на том, не поддерживающий шифрованную файловую систему (EFS), возникнет ошибка. Следует предварительно расшифровать файлы или копировать их на том, поддерживающий EFS. - Добавление файлов
Чтобы объединить файлы, укажите один файл-результат, но несколько файлов-источников (с помощью подстановочных знаков или формата файл1+файл2+файл3). - Значение по умолчанию для результата
Если параметр результат не задан, xcopy будет копировать файлы в текущий каталог. - Указание в качестве результата файла или каталога
Если параметр результат не содержит существующий каталок или не заканчивается обратной чертой(), выводится следующее сообщение:Что означает destination:
имя файла или каталога
(F = файл, D = каталог)?Нажмите F, если файл или файлы должны копироваться в файл. Нажмите D, если файл или файлы должны копироваться в каталог.Чтобы устранить вывод этого сообщения, используйте параметр /i. В результате чего, команда xcopy предполагает, что результат является каталогом, если источник престаляет собой несколько файлов или каталогов. - Использование команды xcopy для установки атрибута «архивный» для файлов результата
Команда xcopy создает файлы с установленным атрибутом «архивный», независимо от состояния этого атрибута у исходных файлов. - Сравнение команд xcopy и diskcopy
Команда xcopy должна быть использована вместо diskcopy при копировании файлов и подкаталогов на диск другого формата. Так как команда diskcopy копирует диски по дорожкам, требуется, чтобы исходный диск и диск-результат имели одинаковый формат. Для команды xcopy это требование не нужно. Обычно следует использовать команду xcopy, если только не требуется получить два диска с одинаковыми образами. - Коды завершения программы xcopy
- Использование параметра /exclude
Для анализа кодов завершения, выведенных командой xcopy, используйте параметр уровень_ошибки в командной строке if пакетных программ.
В следующей таблице перечислены коды завершения с кратким описанием.
| Код завершения | Описание |
|---|---|
| 0 | Файлы скопированы без ошибок |
| 1 | Файлы для копирования не найдены |
| 2 | Нажата комбинация CTRL+C для остановки команды xcopy |
| 4 | Возникла ошибка инициализации. Недостаточно места в памяти или на диске, введено неверное имя диска или неверный синтаксис вызова команды |
| 5 | Диск защищен от записи |
Примеры использования
Чтобы копировать все файлы и подкаталоги (включая пустые подкаталоги) с диска A на диск B, введите:
xcopy a: b: /s /e
Чтобы включить в операцию копирования предыдущего примера системные и скрытые файлы следует использовать параметр /h:
xcopy a: b: /s /e /h
Чтобы обновить файлы в каталоге Reports файлами из каталога Rawdata, измененными после 29 декабря 1993 года, введите:
xcopy rawdata reports /d:29-12-1993
Чтобы обновить файлы предыдущего примера, уже существующие в каталоге Reports, независимо от их даты, введите следующую команду:
xcopy rawdata reports /u
Чтобы получить списк файлов, которые были бы скопированы в предыдущем примере, следует ввести команду:
xcopy rawdata reports /d:29-12-1993 /l > xcopy.out
Список файлов, которые были бы скопированы, находится в файле Xcopy.out.
Чтобы скопировать каталог Customer и все подкаталоги \PublicAddress на сетевой диск H, сохранить у файлов атрибут «только для чтения», введите команду:
xcopy customer h:publicaddress /s /e /k /p
Чтобы выдать предыдущую команду, убедиться, что команда xcopy создает каталог Address и устранить вывод сообщение о создании нового каталога, добавьте параметр /i следующим образом:
xcopy customer h:publicaddress /s /e /k /p /i
Для запуска программы xcopy и анализа кодов завершения можно создать пакетный файл и использовать оператор if для обработки кодов завершения в случае возникновения ошибок. Например, следующая пакетная программа использует замещаемые параметры для задания источникаxcopy и результата:
@echo off
rem COPYIT.BAT копирует все файлы во всех подкаталогах
rem исходного диска или каталога (%1) на другой диск
rem или в другой каталог (%2)
?? xcopy %1 %2 /s /e
??if errorlevel 4 goto lowmemory
?if errorlevel 2 goto abort
?if errorlevel 0 goto exit
??:lowmemory ?
echo Недостаточно памяти для копирования файлов,
задан недопустимый ?echo диск или ошибка в синтаксисе командной строки.
?goto exit
??
:abort ?
echo Нажата комбинация CTRL+C для остановки копирования.
?goto exit ?
?
:exit
Эта пакетная программа может быть использована для копирования всех файлов каталога C:Prgmcode и его подкаталогов на диск B следующим образом:
copyit c:prgmcode b:
Командный интерпретатор подставляет C:Prgmcode вместо параметра %1 и B вместо параметра %2, затем использует команду xcopy с параметрами /e и /s. Если при выполнении xcopy произошла ошибка, пакетная программа считывает код завершения и переходит на метку, указанную в соответствующей инструкции IF ERRORLEVEL. В результате на экран выводится сообщение о характере ошибки и осуществляется выход из пакетной программы.
Справочная информация
Содержание
- xcopy не распознается как внутренняя или внешняя команда, действующая программа или пакетный файл
- 7 ответов
- xcopy
- Синтаксис
- Параметры
- Комментарии
- Примеры
- ошибка «неверный путь 0 скопированных файлов» при использовании команды xcopy
- 1 ответов
xcopy не распознается как внутренняя или внешняя команда, действующая программа или пакетный файл
У меня проблема с использованием команды «xcopy».
Я создаю проект C# с msbuild. В конце сборки вызывается пакетный файл для копирования моих сборок из Debug / Release в некоторые другие папки.
вот проблема, моя ошибка сборки и журнал ошибок «xcopy не распознается как внутренняя или внешняя команда, действующая программа или пакетный файл».
путь правильно установлен, xcopy работает из командной строки windows и из визуального командная строка studio (та, которая установлена в среде проекта).
Я пытался установить путь в пакетном файле, но это не поможет.
какие будут предложения?
Я использую windows 7
7 ответов
я столкнулся с той же проблемой.
похоже, что это проблема с переменной среды path в Visual Studio.
когда я добавил оператор «path» в начало моего события сборки, он произвел следующий вывод:
это, похоже, указывает на то, что путь пуст в среде сборки VS.
когда я указываю полный путь к xcopy, как это, проблема ушла:
Я не уверен что заставило Visual Studio потерять свой путь.
установить переменную среды PATH = %SystemRoot%system32;%SystemRoot%;%SystemRoot%System32Wbem;%SYSTEMROOT%System32WindowsPowerShellv1.0
Это произошло со мной после обновления одного из моих расширений Visual Studio, во время которого Visual Studio была закрыта и снова открыта программой обновления. Я больше не мог правильно строить свой проект. Я закрыл Visual Studio и снова открыл его, и проблема исчезла.
Это не проблема с Windows 7 или 8. На самом деле это проблема с приложениями, которые обновляют переменные среды, такие как PATH. Путь хранится в реестре как » расширяемое строковое значение «(REG_EXPAND_SZ), но многие приложения записывают его обратно в реестр как» строковое значение » (REG_SZ). Если ваш путь содержит что-либо вроде %SYSTEMROOT%, это не будет расширено в C:Windows (или что у вас есть), если путь sotred в REG_SZ.
исправление просто отредактируйте свой путь вручную с панели управления. Вам нужно внести изменения (например, добавить a ; в конец пути), а затем применить его. Это исправит ваш путь в реестре, чтобы быть REG_EXPAND_SZ. (Перейдите на панель управления системой и выберите дополнительные системные настройки. Отредактировать переменную среды PATH в нижнем поле, и это должно исправить.
вы можете сказать, нарушен ли ваш путь таким образом, открыв командную строку и набрав путь. Ваш путь будет указан. Если вы можете видеть все, что заключено в% %, тогда ваш путь не расширяется.
перейти к переменной среды и правильный путь, включая ; в прошлом. Это будет работать, это совсем не связано с ОС или технологией. Он работает для меня, даже не нужно перезапускать ОС, просто откройте новую командную строку.
Источник
xcopy
Копирует файлы и каталоги, включая подкаталоги.
В разделе Примеры показан принцип использования этой команды.
Синтаксис
Параметры
Комментарии
Использование /z
Если вы потеряли подключение на этапе копирования (например, если сервер переходит в режим «вне сети»), то после повторного подключения Подключение возобновится. /z также отображает процент выполнения операции копирования для каждого файла.
Использование /y в переменной среды копикмд.
Копирование зашифрованных файлов
Копирование зашифрованных файлов на том, который не поддерживает EFS, приводит к ошибке. Сначала расшифровать файлы или скопировать их на том, который поддерживает EFS.
Чтобы добавить файлы, укажите один файл для назначения, но несколько файлов для источника (то есть с помощью подстановочных знаков или формата file1 + file2 + файл3).
Значение по умолчанию для назначения
Если опустить назначение, команда xcopy скопирует файлы в текущий каталог.
Указание того, является ли назначение файлом или каталогом
Нажмите клавишу F, если хотите скопировать файл или файлы в файл. Нажмите клавишу D, если хотите скопировать файл или файлы в каталог.
Использование команды xcopy для установки атрибута архива для целевых файлов
Команда xcopy создает файлы с установленным атрибутом Archive, независимо от того, был ли этот атрибут задан в исходном файле. Дополнительные сведения об атрибутах файлов и attrib см. в разделе Дополнительные ссылки.
Сравнение xcopy и diskcopy
Коды выхода для команды xcopy
Для обработки кодов завершения, возвращаемых xcopy, используйте параметр ERRORLEVEL в командной строке If в пакетной программе. Пример пакетной программы, обрабатывающей коды завершения с помощью If, см. в разделе Дополнительные ссылки. В следующей таблице перечислены все коды выхода и их описание.
| Код выхода | Описание |
|---|---|
| Файлы были скопированы без ошибок. | |
| 1 | Не найдены файлы для копирования. |
| 2 | Пользователь нажал клавиши CTRL + C для завершения команды xcopy. |
| 4 | Произошла ошибка инициализации. Недостаточно памяти или места на диске, либо в командной строке введено недопустимое имя диска или недопустимый синтаксис. |
| 5 | Произошла ошибка записи на диск. |
Примеры
1. чтобы скопировать все файлы и подкаталоги (включая все пустые подкаталоги) с диска A на диск B, введите:
2. чтобы включить в предыдущий пример все системные или скрытые файлы, добавьте параметр командной строки /h следующим образом:
3. чтобы обновить файлы в каталоге репортс с файлами в каталоге равдата, которые были изменены с 29 декабря 1993 г., введите:
4. чтобы обновить все файлы, существующие в репортс в предыдущем примере, независимо от даты, введите:
5. чтобы получить список файлов для копирования с помощью предыдущей команды (т. е. без фактического копирования файлов), введите:
Файл xcopy. out содержит список всех копируемых файлов.
6. чтобы скопировать каталог кустомер и все подкаталоги в каталог публикаддресс на сетевом диске H:, оставьте атрибут «только для чтения» и при создании нового файла в H: введите:
7. чтобы выполнить предыдущую команду, убедитесь, что команда xcopy создает каталог аддресс, если он не существует, и подавление сообщения, отображаемого при создании нового каталога, добавьте параметр командной строки /i следующим образом:
8. можно создать пакетную программу для выполнения операций xcopy и использовать пакет If для обработки кода выхода при возникновении ошибки. Например, в следующей пакетной программе для параметров источника и назначения xcopy используются заменяемые параметры:
Чтобы использовать предыдущую пакетную программу для копирования всех файлов в каталоге К:пргмкоде и его подкаталогов на диск B, введите:
9. в этом примере копируются все непустые каталоги, а также файлы, имя которых соответствует шаблону, заданному с помощью символа звездочки.
Источник
ошибка «неверный путь 0 скопированных файлов» при использовании команды xcopy
Привет у меня есть эта маленькая команда для копирования файлов в пакет, что поможет, потому что я делаю эту конкретную копию несколько раз в день. Проблема возникает при использовании команды xcopy. Все в порядке, но я получаю эту ошибку: «неверный путь 0 файлы скопированы». Вот код:
Я использую полный путь к исполняемому файлу xcopy, потому что у меня возникли проблемы с настройкой переменной среды path для правильной работы. Я бы предположил, что это не должно однако влияет на результат. Я где-то читал о флажке «запретить программам на базе MS-DOS обнаруживать Windows», который должен устранить проблему, но я просто не могу найти это. Любая помощь приветствуется.
1 ответов
оригинальный ответ
удалите конечную обратную косую черту из пути к исходной папке
редактировать 2015/10/01
в то время как исходный вопрос использовал буквальный путь, и указанное решение решит проблему, есть еще один вариант. Для литеральных путей и в случаях, когда путь находится внутри переменной и может (или нет) заканчиваться обратной косой чертой, достаточно убедиться, что конечная обратная косая черта (если present) отделяется от цитаты, включая конечную точку.
эта конечная точка не будет вмешиваться в имена файлов/папок. Если есть и окончание обратной косой черты, дополнительная точка будет просто ссылаться на ту же папку. Если нет окончания обратной косой черты, как в windows, файлы и папки не могут закончить свои имена точкой, она будет отброшена.
но если выход xcopy команда будет обработана, помните, что эта дополнительная точка будет включена в показанных путях.
почему xcopy «c:source» «d:target» а не xcopy «c:source» «d:target» работает?
As xcopy является внешней командой, ее аргументы не обрабатываются после cmd логика командной строки парсера. Они обрабатываются код запуска Microsoft C.
этот парсер следует за двумя своды правил, официальные правила
Аргументы разделяются пробелом, который является пробелом или знаком табуляции.
строка, заключенная в двойные кавычки рассматривается как один аргумент, независимо от пробелов внутри. Двойные кавычки string может быть встроен в аргумент. Обратите внимание, что каретка ( ^ ) не распознается как escape-символ или разделитель.
обратные косые черты интерпретируются буквально, если они непосредственно не предшествуют двойной кавычке.
если за четным числом обратных косых черт следует двойная кавычка, то одна обратная косая черта ( ) помещается в массив argv для каждого пара обратных косых черт ( ), и двойная цитата Марк ( » ) является интерпретируется как строковый разделитель.
если за нечетным числом обратных косых черт следует двойная кавычка, то одна обратная косая черта ( ) помещается в массив argv для каждого пара обратных косых черт ( ) и двойная кавычка интерпретируется в качестве escape-последовательности оставшейся обратной косой черты, вызывающей литерал двойная кавычка ( » ) для размещения в argv.
этот парсер видит последовательность » найдено в конце «первый» аргумент как экранированная цитата, которая не завершает / закрывает аргумент, он рассматривается как часть или аргумент. И «начало» цитата «во-вторых» аргумент просто заканчивает блок с двойными кавычками, но не заканчивает аргумент, помните, что аргументы разделен пробелом.
так что пока это кажется что аргументы командной строки
фактический аргумент обрабатывается xcopy is
когда конечная обратная косая черта удалена или включена дополнительная точка, заключительная цитата в аргументе не будет экранирована, она закроет цитируемый блок, а пространство между аргументами будет рассматриваться как разделитель.
Источник







