Xcopy не работает в bat файле

Обновлено: 06.07.2024

Команда XCOPY используется для копирования файлов и каталогов с сохранением их структуры. По сравнению с командой COPY имеет более широкие возможности и является наиболее гибким средством копирования в командной строке Windows

Формат командной строки:

XCOPY источник [целевой_объект] [/A | /M] [/D[:дата]] [/P] [/S [/E]] [/V] [/W] [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U] [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B] [/EXCLUDE:файл1[+файл2][+файл3]. ]

Параметры командной строки:

источник - Копируемые файлы.

целевой_объект - Расположение или имена новых файлов.

/A - Копирование только файлов с установленным архивным атрибутом; сам атрибут при этом не изменяется.

/M - Копирование только файлов с установленным архивным атрибутом; после копирования атрибут снимается.

/D:m-d-y - Копирование файлов, измененных не ранее указанной даты. Если дата не указана, заменяются только конечные файлы, более старые, чем исходные.

/EXCLUDE:файл1[+файл2][+файл3]. - Список файлов, содержащих строки с критериями для исключения файлов и папок из процесса копирования. Каждая строка должна располагаться в отдельной строке файла. Если какая-либо из строк совпадает с любой частью абсолютного пути к копируемому файлу, такой файл исключается из операции копирования. Например, указав строку \obj\ или .obj, можно исключить все файлы из папки obj или все файлы с расширением OBJ соответственно.

/P - Вывод запросов перед созданием каждого нового файла.

/S - Копирование только непустых каталогов с подкаталогами.

/E - Копирование каталогов с подкаталогами, включая пустые. Эквивалентен сочетанию ключей /S /E. Совместим с ключом /T.

/V - Проверка размера каждого нового файла.

/W - Вывод запроса на нажатие клавиши перед копированием.

/C - Продолжение копирования вне зависимости от наличия ошибок.

/I - Если целевой объект не существует и копируется несколько файлов, считается, что целевой объект задает каталог.

/Q - Запрет вывода имен копируемых файлов.

/F - Вывод полных имен исходных и целевых файлов.

/L - Вывод имен копируемых файлов.

/G - Копирование зашифрованных файлов в целевой каталог, не поддерживающий шифрование.

/H - Копирование, среди прочих, скрытых и системных файлов.

/R - Перезапись файлов, предназначенных только для чтения.

/T - Создание структуры каталогов без копирования файлов. Пустые каталоги и подкаталоги не включаются в процесс копирования. Для создания пустых каталогов и подкаталогов используйте сочетание ключей /T /E.

/U - Копирование только файлов, уже имеющихся в целевом каталоге.

/K - Копирование атрибутов. При использовании команды XСOPY обычно сбрасываются атрибуты "Только для чтения".

/N - Использование коротких имен при копировании.

/O - Копирование сведений о владельце и данных ACL.

/X - Копирование параметров аудита файлов (подразумевает ключ /O).

/Y - Подавление запроса подтверждения на перезапись существующего целевого файла.

/-Y - Запрос подтверждения на перезапись существующего целевого файла.

/Z - Копирование сетевых файлов с возобновлением.

/B - Копирование символической ссылки вместо ее целевого объекта.

/J - Копирование с использованием небуферизованного ввода/вывода. Рекомендуется для очень больших файлов.

Ключ /Y можно установить через переменную среды COPYCMD.

Ключ /-Y командной строки переопределяет такую установку.

Примеры использования XCOPY

XCOPY /? - выдать краткую справку по использованию команды.

Что означает D:\copy1:
имя файла или каталога
(F = файл, D = каталог)? D

После ответа D целевой каталог будет создан и копирование будет выполняться в D:\COPY1\. Для подавления запроса на создание целевого каталога используется параметр /I:

xcopy C:\users D:\copy1 /I

xcopy C:\users D:\copy1 /H /Y /C - копирование файлов, включая скрытые и системные, с подавлением запроса на перезапись существующих и возобновлением при ошибке. Если существующий в целевом каталоге файл имеет атрибут "Только чтение", то копирование не выполняется. Для перезаписи таких файлов используется ключ /R

xcopy C:\users D:\copy1 /H /Y /C /R /S - скопировать все файлы и подкаталоги ( /S ) с перезаписью существующих без запроса ( /Y ) , включая скрытые и системные. ( /H ) с перезаписью файлов с атрибутом "Только чтение" (/R) и игнорированием ошибок ( /C )

xcopy C:\users D:\copy1 /H /Y /C /R /S /EXCLUDE:C:\users\listnotcopy.txt - то же, что и в предыдущем случае, но текстовый файл C:\users\listnotcopy.txt задает признаки исключения из процедуры копирования. Пример содержимого файла:

\User1\ - исключить из копирования каталог C:\users\user1
All Users исключить из копирования каталог C:\users\All Users
de*.* - исключить из копирования все файлы и каталоги, начинающиеся на буквосочетание "de"

xcopy C:\users\*.exe D:\copy1 /H /Y /C /R /S /EXCLUDE:C:\users\listnotcopy.txt - то же, что и в предыдущем примере, но выполняется только копирование исполняемых файлов с расширением .exe .

xcopy %TEMP%\*.ini D:\copy1\ini /H /Y /C /R /S /I - копирование всех файлов с расширением .ini из каталога временных файлов в каталог D:\copy1\ini\ . Если целевой подкаталог \ini\ не существует, то он будет создан без запроса пользователю ( /I ) .

xcopy %TEMP%\*.ini D:\copy1\ini /H /Y /C /R /S /I /D:09-16-2013 - то же, что и в предыдущем примере, но выполняется копирование только тех файлов, у которых установлена дата изменения 16 сентября 2013 года и старше.

xcopy C:\ D:\copy1\LISTDIR /H /Y /C /R /S /I /E /T - создать структуру папок диска C: в каталоге D:\copy1\LISTDIR . Копирование файлов не выполняется. Копируются только папки, включая пустые, скрытые и системные.

xcopy C:\ D:\copy1\LISTDIR /H /Y /C /R /S /I /E /T /D:09-16-2013 воссоздать в каталоге D:\copy1\LISTDIR структуру папок диска C: , с датой изменения 16 сентября 2013 года и позже.

Для добавления новых файлов в каталоги и обновления существующих на более поздние версии, можно использовать команду REPLACE.

не работает bat файл если в пути имеются русские символы.
Для примера:

@echo off
xcopy "D:\BASE\. \save" "%UserProfile%\Мои документы" /E /C /H /R /K /Y /Z

@echo off
xcopy "D:\БАЗА\. \save" "%UserProfile%\Documents" /E /C /H /R /K /Y /Z

Хоть вариант 1, хоть вариант 2 не работают. Переименовать папки нет возможности. Что можно сделать?

P.S.>> Поиском воспользовался, но ничего подходящего не нашел.

Конфигурация компьютера
Процессор: Intel Core i7-3770K
Материнская плата: ASUS P8Z77-V LE PLUS
Память: Crucial Ballistix Tactical Tracer DDR3-1600 16 Гб (2 x 8 Гб)
HDD: Samsung SSD 850 PRO 256 Гб, WD Green WD20EZRX 2 Тб
Видеокарта: ASUS ROG-STRIX-GTX1080-O8G-11GBPS
Звук: Realtek ALC889 HD Audio
Блок питания: be quiet! Straight Power 11 650W
CD/DVD: ASUS DRW-24B5ST
Монитор: ASUS VG248QE 24"
ОС: Windows 8.1 Pro x64
Индекс производительности Windows: 8,1
Прочее: корпус: Fractal Design Define R4
Поиском воспользовался, но ничего подходящего не нашел.
Что-то не то и не так искали, вопрос из FAQ (задается регулярно).
Как добиться правильной работы пакетных файлов (*.bat, *.cmd), содержащих кириллические пути?

Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

если вы батник пишите в win-1251 кодировке, тогда папробуйте так.

Моя вина в поиске искал а в FAQ не заглянул. Исправлюсь
Возник вопрос DOS-866 и OEM 866 (пользуюсь Notepad++) это одно и тоже? Pinguine, DOS/OEM/866 - одно и то же (для русской локали)

-------
Как сообщить о том, что моя проблема решена?
не оказываю техподдержку через ПМ/ICQ/Mail - для этого есть форум

root221, Подскажи, как правильно написать данный код:
RMDIR \S \Q C:\Users\Administrator\Documents\Общие документы\Games
Не могу не как сделать чтобы на русском мог ввести. Переименовать папку " Общие документы " нельзя. Подскажи как правильно сделать, чтобы bat работал при запуске ?

Точнее код так выглядит RMDIR /S /Q C:\Users\Administrator\Documents\Общие документы\Games

У меня проблема с использованием команды "xcopy".

вот проблема, моя ошибка сборки и журнал ошибок "xcopy не распознается как внутренняя или внешняя команда, действующая программа или пакетный файл".

путь правильно установлен, xcopy работает из командной строки windows и из визуального командная строка studio (та, которая установлена в среде проекта).

Я пытался установить путь в пакетном файле, но это не поможет.

какие будут предложения?

Я использую windows 7

я столкнулся с той же проблемой.

похоже, что это проблема с переменной среды path в Visual Studio.

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

это, похоже, указывает на то, что путь пуст в среде сборки VS.

когда я указываю полный путь к xcopy, как это, проблема ушла:

Я не уверен что заставило Visual Studio потерять свой путь.

установить переменную среды PATH = %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

Это произошло со мной после обновления одного из моих расширений Visual Studio, во время которого Visual Studio была закрыта и снова открыта программой обновления. Я больше не мог правильно строить свой проект. Я закрыл Visual Studio и снова открыл его, и проблема исчезла.

Это не проблема с Windows 7 или 8. На самом деле это проблема с приложениями, которые обновляют переменные среды, такие как PATH. Путь хранится в реестре как " расширяемое строковое значение "(REG_EXPAND_SZ), но многие приложения записывают его обратно в реестр как" строковое значение " (REG_SZ). Если ваш путь содержит что-либо вроде %SYSTEMROOT%, это не будет расширено в C:\Windows (или что у вас есть), если путь sotred в REG_SZ.

вы можете сказать, нарушен ли ваш путь таким образом, открыв командную строку и набрав путь. Ваш путь будет указан. Если вы можете видеть все, что заключено в% %, тогда ваш путь не расширяется.

Я только что испытал это в первый раз с пакетным файлом, который я использую для копирования интерфейсного приложения Access на локальные машины пользователя. Их среда представляет собой смесь Windows 7 & 8 и 32-64 битных машин. Я заметил, что xcopy.exe был как в System32, так и в папках SysWOW64, и мне было интересно, был ли какой-то конфликт. Итак . я скопировал xcopy.exe в папку, где находится пакетный файл и теперь это, кажется, работает. Просто решил поделиться.

перейти к переменной среды и правильный путь, включая ; в прошлом. Это будет работать, это совсем не связано с ОС или технологией. Он работает для меня, даже не нужно перезапускать ОС, просто откройте новую командную строку.

Переключатель /I (не /F как вы упомянули в своем вопросе) не позволяет xcopy спрашивать, является ли место назначения файлом или каталогом, только если указано несколько исходных файлов, поэтому, если источником является каталог, или если подстановочные знаки ? или * используются. Если место назначения уже существует, такое приглашение никогда не появится.

Существуют следующие сценарии (в зависимости от предоставленных значений %source% и %target% ):

один исходный файл, местом назначения является файл:

переключатель /I бесполезен, поэтому вам нужно передать F в командную строку xcopy :

при условии, что задан переключатель /Y (для принудительной перезаписи), вы также можете заранее создать целевой файл (пустой файл)

один исходный файл, местом назначения является каталог:

или вы можете просто добавить \ к месту назначения:

, хотя это вызывает проблемы, когда %target% указывает текущий каталог диска как D: например, потому что D: означает текущий каталог этого диска, тогда как D:\ означает его корневой каталог;

или вы заранее создаете каталог назначения:

несколько исходных файлов, местом назначения является файл:

обычно это бессмысленная ситуация, потому что вы указываете xcopy копировать каждый исходный файл в один и тот же файл назначения, пытаясь таким образом перезаписать она;

несколько исходных файлов, местом назначения является каталог:

переключатель /I здесь имеет смысл:

опция pipe также работает здесь:

также добавляет \ к месту назначения (относительно ограничения, упомянутого выше):

или вы заранее создаете каталог назначения:

Заключение

Самое гибкое и безопасное решение - передать желаемый выбор ( F или D ) в командную строку xcopy . (Обратите внимание, что запрос зависит от локали.)

Дополнение

В вашем фрагменте кода есть некоторые незначительные проблемы, о которых я хочу упомянуть здесь:

  • как правило, вы должны использовать \ в качестве разделителя пути, поскольку это стандартный символ Windows для этой цели (хотя / в большинстве случаев тоже работает);
  • к вашему второму -1111 /code> командная строка; если это составляет пароль для ресурса, его следует переместить перед параметром net use ; в противном случае просто удалите его;
  • ваши командные строки /USER создают проблемы с некоторыми специальными символами (например, set , & , ^ , ( ); чтобы избежать этого, укажите ) и set "source=%

Читайте также: