Пакетний файл для копіювання файлів з однієї папки в іншу


235

У мене в мережі папка зберігання, в якій всі користувачі будуть зберігати свої активні дані на сервері. Тепер цей сервер буде замінений на новий через проблему з місцем, тому мені потрібно скопіювати файли підпапок зі старої папки зберігання сервера в нову папку зберігання сервера. У мене нижче екс:

від \ Oldeserver \ зберігання \ дані та файли до \ Новий сервер \ зберігання \ дані та файли.


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- Якщо пункт призначення не існує і копіює більше одного файлу, передбачається, що пункт призначення повинен бути каталогом.
lavinio

1
Як скопіювати один файл із каталогу?
Charan Raju CR

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```
Joel Карнейро

18

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


3
RoboCopy здається кращим, ніж XCopy, тому що xcopy запитує рішення щодо файлів чи папок. І я не можу це відмовити. Він ОБОВ'ЯЗКОВО зможе працювати повністю автоматичним.
Bitterblue

@ mini-me Я знаю, що це дуже пізно, але я не можу знайти той же відповідний перемикач. Я врешті-решт вдався до того, щоб змусити створити порожній файл з тим самим іменем, в який я копіюю, а потім перезаписати його. Якщо файл вже існує, він не турбується, чи є його файлом чи каталогом. (Якщо ви хочете автоматичний каталог, тоді ви можете додати '/' до контуру, і він це зробить). Сподіваюся, це допомагає майбутнім людям!
Том C

2
@Eve Для довідки echo f | xcopy source destination /yзробить це автоматичним. Він присвоює всі питання "f" як відповідь. Він також передасть запити перезапису (я вважаю, що "так" вважається "так".
ndm13

14

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

echo f | xcopy /f /y srcfile destfile

або для тих, хто просто копіює великі підструктури / папки:

use / i, яке вказує призначення, повинно бути каталогом, якщо копіюється більше одного файлу


(відлуння "f" для файлів або "D" для каталогів)
JinSnow

намагаюся зробити це зараз, і це просто не працює - я завжди отримую підказки при спробі скопіювати один файл в інший каталог. Використання Win 10, якщо це взагалі впливає на ехо | 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


Я думаю, що \ називається косою рисою.
Леон

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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.