Пакетный файл для копирования файлов из одной папки в другую папку

235

У меня есть папка хранения в сети, в которой все пользователи будут хранить свои активные данные на сервере. Теперь этот сервер будет заменен на новый из-за проблем с размещением, поэтому мне нужно скопировать файлы подпапок из старой папки на сервере в новую папку на сервере. У меня ниже ex:

из \ Oldeserver \ storage \ data & files в \ New server \ storage \ data & files.

user73628
источник
3
Я полагаю, вы говорите о среде Windows?
Алан Плам
4
@ HugoM.Zuleta, мне известны файлы .bat. Но «пакетный файл» не обязательно гарантирует среду Windows. Использование термина предшествует Windows (как и файлы .bat), и я даже видел, как новички используют этот термин для обозначения «сценариев оболочки» в средах * nix.
Алан Плам
1
@pluma Я согласен, и это в основном потому, что они относятся к пакетным операциям, выполняемым инструментами сценариев их ОС.
Хьюго М. Зулета

Ответы:

441

xcopy.exe определенно ваш друг здесь. Он встроен в Windows, поэтому его стоимость ничто.

Просто xcopy /s c:\source d:\target

Возможно, вы захотите изменить несколько вещей; некоторые из опций, которые мы также добавляем, включают в себя:

  • /s/e - рекурсивное копирование, в том числе копирование пустых каталогов.
  • /v- добавьте это, чтобы проверить копию против оригинала. медленнее, но для параноика.
  • /h - копировать системные и скрытые файлы.
  • /k- копировать атрибуты только для чтения вместе с файлами. в противном случае все файлы становятся доступными для чтения и записи.
  • /x- если вы заботитесь о разрешениях, вы можете /oили /x.
  • /y - не запрашивать перед перезаписью существующих файлов.
  • /z- если вы думаете, что копия может потерпеть неудачу, и вы хотите перезапустить ее, используйте это. Он размещает маркер на каждом файле при копировании, поэтому вы можете повторно запустить команду xcopy, чтобы продолжить с того места, где он остановился.

Если вы думаете, что xcopy может потерпеть неудачу на полпути (например, когда вы копируете по нестабильному сетевому соединению), или что вам нужно остановить его и продолжить его позже, вы можете использовать его xcopy /s/z c:\source d:\target.

Надеюсь это поможет.

Лавинио
источник
2
@Iavinio Запрашивает файл или каталог при копировании архива. Есть ли способ подавить это?
Bitterblue
Привет @ mini-me - я обнаружил, что если это каталог, вы можете указать завершающий символ '/', и вы не увидите это сообщение.
DaveDev
2
/i- Если пункт назначения не существует и копируется более одного файла, предполагается, что пункт назначения должен быть каталогом.
Лавинио
1
Как скопировать один файл из каталога?
Чаран Раджу ЧР
10
Чтобы обойти подсказку «файл или каталог», выполните команду так ... echo f | xcopy /s /f srcfile destfile
wintondeshong
56

Мой любимый для резервного копирования данных:

ROBOCOPY "C:\folder" "C:\new_folder" /mir

/ mir для зеркала. Вы также можете использовать / MOV для перемещения файлов. Он воспроизводит точно такую ​​же папку. Он может удалять / перезаписывать файлы по мере необходимости. Прекрасно работает для меня. Это быстрее, чем xcopy / copy. Он также встроен в Windows.

Источник: http://technet.microsoft.com/en-us/library/cc733145.aspx

Этьен Дюпюи
источник
2
Я поддерживаю это. Это действительно быстро. намного быстрее чем xcopy
Ike
Есть ли способ рекурсивного удаления thumbs.db, аналогичный этому?
drooh
54

Просто для ясности, когда вы используете xcopy /s c:\source d:\target, поместите "" вокруг c: \ source и d: \ target, иначе вы получите ошибку.

т.е. если в пути есть пробелы, т.е. если у вас есть:

"C:\Some Folder\*.txt"

но не обязательно, если у вас есть:

C:\SomeFolder\*.txt
Айк
источник
1
Кавычки сделали свое дело;) спасибо, я также использовал / Y, чтобы заменить файл, если он существует :) Пример: ´´´xcopy / s "c: \ source" "d: \ target" / Y```
Джоэл Карнейру
18

Возможно, вы захотите взглянуть на XCopy или RoboCopy, которые являются довольно комплексными решениями практически для всех операций копирования файлов в Windows.

детеныш
источник
3
RoboCopy, кажется, лучше, чем XCopy, потому что xcopy запрашивает решения для файлов или папок. И я не могу от этого отказаться. Он ДОЛЖЕН быть в состоянии работать полностью автоматически.
Bitterblue
@ mini-me, я знаю, что уже очень поздно, но я не могу найти тот же соответствующий переключатель. Я закончил тем, что заставил его создать пустой файл с тем же именем, которое я копирую, а затем переписать его. Если файл уже существует, он не спрашивает, является ли он файлом или каталогом. (Если вы хотите авто каталог, тогда вы можете добавить '/' к пути, и он сделает это). Надеюсь, это поможет будущим людям!
Том C
2
@Eve Для справки, echo f | xcopy source destination /yсделаем это автоматически. Он присваивает всем вопросам "F" в качестве ответа. Он также будет передавать запросы на перезапись (я думаю, что f принимается как да).
ndm13
14

Чтобы обойти 'указать имя файла или имя каталога на цели (F = файл, D = каталог)? " подскажите с xcopy, вы можете сделать следующее ...

echo f | xcopy /f /y srcfile destfile

или для тех из нас, кто просто копирует большие подструктуры / папки:

используйте / i, который указывает место назначения, должно быть каталогом, если копируется более одного файла

wintondeshong
источник
(эхо "F" для файлов или "D" для каталогов)
JinSnow
пытаясь сделать это сейчас, и это просто не работает - я всегда получаю подсказки при попытке скопировать один файл в другой каталог. Использование Win 10, если это вообще влияет на это echo f | xcopy / f / y "My.dll" "C: \ myFolder \ My.dll". Я пробовал это с комбинацией других переключателей безрезультатно (и заглавная буква F)
Проф
3

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

не забудьте написать обратную косую черту в пути, а не косую черту

пример :

    copy children-folder\file.something .\other-children-folder

PS: абсолютный путь может быть получен с использованием этих групповых символов, называемых «пакетные параметры»

    @echo off
    echo %%~dp0 is "%~dp0"
    echo %%0 is "%0"
    echo %%~dpnx0 is "%~dpnx0"
    echo %%~f1 is "%~f1"
    echo %%~dp0%%~1 is "%~dp0%~1"

проверьте документацию здесь о копии: https://technet.microsoft.com/en-us/library/bb490886.aspx

а также здесь для документации по пакетным параметрам: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true

marcdahan
источник
Я думаю, что \ называется обратная косая черта.
Леон
2
@echo off

rem The * at the end of the destination file is to avoid File/Directory Internal Question.

rem You can do this for each especific file. (Make sure you already have permissions to the path)
xcopy /Y "\\Oldeserver\storage\data\MyFile01.txt" "\\New server\storage\data\MyFile01.txt"*
pause

rem You can use "copy" instead of "xcopy "for this example.
Дэвид Кастро
источник
0

Посмотрите на rsyncоснове Windows инструмент NASBackup . Это будет бонусом, если вы знакомы с командами rsync.

Nik
источник