Утилиты copy и replace — копирование и замена файлов через командную строку
И в данном посте я рассмотрю замену и копирование файлов через командную строку, а именно, утилиты COPY и REPLACE. Но сперва, как всегда немого лирики.
Пожалуй, любой программист сталкивался с вопросом написания функции для копирования каталога с файлами. Как правило, эти задачи решались при использовании рекурсии. В былые времена, не было мышки и правого клика со вкладкой «копировать, вырезать, вставить», да и синий Волков не сразу появился. Это теперь все так привычно, сидишь за клавиатурой, втыкаешь в зеленое поле Винды, клик туда, клик сюда, и все, задачу решил. Но, бывали и трудные ситуации, когда приходилось прибегать к синему менеджеру. Как не странно, но командная строка и ее утилиты от версии к версии меняют свой вид, Есть даже целый набор утилит типа PsUtils, которые эффективней стандартных ДОСовских. Логический вопрос, кому это все надо! Какой смысл изобретать современного динозавра, йоп те! С другой стороны, такова наша природа человеческая, мы готовы даже велосипед снова изобрести, лишь бы занять свой ум.
Командная строка COPY
Данный шедевр человеческой мысли позволяет произвести копирование (copy) через командную строку файла или файлов или даже их конкатенацию (объединение). Для решения подобных задач север сценариев Windows Script Host предоставляет в распоряжение метод CopyFile объекта FileSystemObject. Синтаксис утилиты командной строки copy, довольно устрашающий:
COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B] источник [/A | /B] [+ источник [/A | /B] [+ . ]] [результат [/A | /B]]
/D – указывает на возможность создания зашифрованного файла.
/Y | /-Y – если выбран первый параметр, то будут отсутствовать запросы системы на подтверждение во время копирования (проще говоря, если придется топкой 1000 файлов копировать, то на каждый не будет выпрыгивать надоедливое “а вы уверены, или, может, другу позвоните?”), понятно, что второй параметр как раз то включает запрос подтверждения.
/Z – позволяет копировать данные по сети, кстати, в предыдущих вариантах данной утилиты этого ключа не наблюдалось.
/А – указывает, что файл является текстовым, если мы укажем данный параметр, то копирование прервется на метке конца файла ASCII код 26.
Если же данный параметр указан в самом конце, то эффект совсем другой. Произойдет полное копирование документа, но в копии будет добавлена метка конца файла если ее не было. Как результат, можете попробовать поэкспериментировать с pdf документом (my_file.pdf – размер документа составляет 247217 байт):
copy my_file.pdf/A new_file.pdf – на выходе мы получим документ new_file.pdf размером в 2538 байт.
/B – данный ключ идет по умолчанию и указывает, что файл является бинарным. То есть, происходит копирование всего документа.
/V – данный параметр включает проверку правильности копирования, сравнивая данные после завершения процедуры.
И так командная строка, копирование файлов и парочка примеров:
Копирование через командную строку файла 123.txt из текущего каталога в каталог D:\NEW под тем же именем:
COPY 123.txt D:\NEW
Копирование файла 123.txt из текущего каталога в каталог D:\NEW под новым именем new.txt:
COPY 123.txt D:\NEW\new.txt
Копирование всех документов с расширением txt с диска D:\ в каталог My Data на диске C:
COPY D:\*.txt «С:\My Data»
Допустим, мы находимся в каталоге D:\NEW и нам надо копирнуть в него все данные из каталога C:\DATA, в таком случае достаточно прописать следующий синтаксис:
COPY C:\DATA *.*
Используя командную строку, копируемые файлы можно склеить. Для этих целей достаточно использовать знак плюса «+», например:
COPY 1.txt +2.txt 3.txt– в данном примере содержимое документов 1.txt и 2.txt было объединено в 3.txt. Стоит помнить, что по дефолту, утилита COPY воспринимает данные как текстовые.
Вот пример с двоичными данными:
COPY /В *.dat all.dat – в данном варианте все данные с расширением dat из текущей папки были объединены в один файл all.dat.
Вообще, используя символ плюса «+» и мысли типа «а что если», можно проделать парочку экспериментов. Также стоит помнить ряд моментов:
Если название целевого объекта совпадает с одним из копируемых (кроме первого), то исходное содержимое целевого объекта будет утеряно.
Если имя целевого объекта опущено, то в его качестве будет использован первый объект из списка:.
COPY l.txt+2.txt – тут мы добавили к содержимому первого объекта содержимое второго.
COPY 1.txt +,, – данная конструкция позволяет присвоить объекту 1.txt текущую дату без его модификации.
Утилита COPY по своему первенству содержит ряд недостатков:
- нельзя производить копирование файлов через командную строку с атрибутами скрытый или системный, а также системных и с атрибутом «Только для чтения».
- обрыв всего процесса копирования при встрече с объектом, который в данный момент не поддается копированию.
В связи с такими неудобствами, умные люди подумали, и прибавили букву Х к названию COPY, чем решили массу проблем, создав утилиту XCOPY.
Командная строка REPLACE
Фактически, отличие данной утилиты в том, что она умеет заменять данные. Синтаксис довольно простой и понятный:
REPLACE [диск1:][путь1]имя_файла [диск2:] [путь2] [/А] [/Р] [/R] [/W]
REPLACE [диск1:][путь1]имя_файла [диск2:] [путь2] [/Р][/R][/S][/W][/U]
[диск1:] [путь1]имя_файла – определяем местонахождении копируемого объекта, или объектов.
[диск2:] [путь2] — определяем местонахождении объекта-результата. Как видно, имена замещаемых объектов задавать нельзя.
/А – добавляем в каталог-результат только новые объекты из каталога-результата (без перезаписи). Этот ключ нельзя использовать с ключами /S и / U.
/Р – выводится запрос на подтверждение перед заменой целевого или добавлением исходного файла.
/R – замещение не только обычных, но и защищенных от записи документов.
/S – позволяет производить поиск по всем подкаталогам целевого каталога и заменять файлы с совпадающими именами. Этот ключ нельзя использовать совместно с ключом /А. Поиск в каталогах, заданных параметром путь1, не производится.
/W – ожидание вставки диска перед началом выполнения
/U – режим обновления, то есть будут заменены только те объекты, которые имеют более раннюю дату модификации. Несовместимость с ключом /A.
Replace D:\Data\my_file.txt D:\Work – в папке Work заменяем файл my_file.txt на D:\Data\my_file.txt
При копировании файлов через командную строку посредством утилиты REPLACE, отсутствует возможность обновления скрытых или системных файлов. Для этого надо предварительно сменить их атрибуты.
Спасибо за внимание. Автор блога Владимир Баталий
Как скопировать Windows 7/8/10 на другой диск, D
Стоит задача, начальные условия такие:
- Жёсткий диск разбит на два или больше раздела
- Установлена Windows 7 на диске C:
- Требуется установить Windows 10
- Текущий виндовс должен остаться работоспособным и запускаться с диска D:
- Форматировать диск «Д» нельзя
- Пользователь не впервые видит компьютер 🙂
А можно наоборот, устанавливать семёрку, а копировать десятку, и диски поменять местами, это ничего не меняет.
Для чего это? Ну, например, давно пора переустановить систему, но в старой ОС много чего было установлено и настроено с незапамятных времён. При переустановке ОС все программы и настройки теряются. А хочется, чтобы можно было запустить старую систему и подсмотреть что же там и как работало. Ну или тупо какие-то лицензии проблематично перенести.
Вся сложность состоит в том, что существующие программы умеют переносить Windows на другой жёсткий или SSD-диск, но на такой же логический раздел. Т.е., с диска C: на диск C. А вот так, чтобы на тот же физический диск и на второй раздел – не умеют. Всё усложняется тем, что даже если и научатся, то форматировать диск-назначение нам нельзя, потому что по легенде там тонны инфы, которую некуда или очень долго и геморно девать.
Придётся поколдовать. План действий такой:
- Правим загрузочное меню
- Загружаемся с флешки
- Копируем системные папки
- Меняем буквы дисков
Меню загрузки Windows
При загрузке Windows у нас будет появляться меню с возможностью выбора операционной системы: новая (текущая) Windows и скопированная текущая. Чтобы добавить туда новый пункт
Запускаем через правую кнопку и выбираем «Запуск от имени администратора». Далее идём на вкладку «BCD», где должно быть выбрано «BCD of current system». Кликаем по кнопке «Easy mode»
Далее нажимаем кнопку «Add» и из списка выбираем «New Windows 7/8/10 entry»
Теперь нужно настроить новый элемент меню:
Boot Disk: наш жёсткий диск с текущей Windows
Partition: раздел (диск D), на который скопировали текущую Windows
OS title: произвольное название пункта меню
Language: ru-RU, русский язык
Timeout: секунды, через сколько автоматически выберется пункт по умолчанию.
Для записи изменений жмякаем «Save current system». Всё это можно сделать и потом, читайте ниже.
Подготовка флешки
Создаём загрузочную флешку по статье. Нам понадобится Paragon Hard Disk Manager и Acronis Disk Director. Поэтому выбираем образ для флешки, где есть эти программы. Подходит образ от Sergei Strelec. Вместо флешки может быть CD/DVD или внешний жёсткий диск, это не принципиально.
Загружаемся с флешки в среду Windows PE, это та винда, которая запускается с USB.
Копирование Windows
Теперь нужно скопировать системные папки в корень диска D, а именно:
- Windows
- Users
- Program Files
- Program Files (x86) – если есть
- ProgramData
Все эти папки нужны, чтобы Windows и все установленные программы функционировали на втором разделе. Некоторые узкоспециализированные программы по умолчанию устанавливаются в корень диска, а не в папку «Program Files», поэтому пробегитесь глазками по корню диска C: и если увидите знакомые названия папок, то их тоже нужно скопировать.
Можно просто копировать с помощью файлового менеджера, например, Total Commander. Можно пользоваться программой TeraCopy, которая включена в образ Sergei Strelec. Она копирует без остановки на сообщения об ошибках, если что. И потом в конце можно посмотреть что не получилось скопировать и предпринять меры.
На этом шаге могут быть проблемы. Удивительно, но запустив Windows с флешки, она всё ещё защищает системные файлы виндов на других дисках! Не всегда, но бывает. Поэтому могут быть сообщения об ошибках доступа, при копировании файлов реестра и его пользовательских веток (ntuser.dat). А именно проблемные папки:
- System32\config
- ServiceProfiles
- Users\папка пользователя\ntuser*.*
Если вы послушались и выбрали образ с Paragon Hard Disk Manager, тогда копируем ВСЁ или только проблемные места ИМ. Запускаем его, идём в «Утилиты» и там выбираем «Перемещение файлов»
Выбираем необходимые папки или файлы и дожидаемся окончания процесса:
Ещё можно скопировать с помощью Acronis True Image, выбирая там резервное копирование файлов, сохраняя их на другой диск, а потом восстанавливая на свой диск Д.
Если у кого-то будет только эта программа в распоряжении – то пожалуйста. Но она иногда, почему то, она зависает при копировании больших объёмов, например, всех нужных папок.
Если на флешке оказалась утилита BOOTICE, то можно добавить в пункт меню ещё один Windows сейчас, а не на первом шаге. Все действия те же, но на вкладке «BCD» выбираем «Other BCD file» и ищем его по пути «C:\boot\BCD». Сейчас диск C — это скрытый диск в обычной винде, а загрузившись в Windows PE его видно, и он должен быть объёмом 100-350 Mb. Либо, если такого скрытого диска нет, то это диск с текущей Windows 7/8/10.
Финальных штрих – буквы
И теперь самая изюминка. Основная проблема запуска виндовса с другого диска это то, что у него другая буква, например D, а большинство настроек намертво прописаны на диск C. Будем менять буквы дисков в копии операционной системы, т.е., чтобы Windows считал тот диск Д, на котором он сейчас находится, диском C.
Итак, запускаем с флешки Acronis Disk Director. Выбираем из списка скопированную Windows. У вас сейчас по идее должно было получиться два одинаковых виндовса, а отличить копию можно по букве диска и его размеру, на котором она находится:
Теперь кликаем по диску C правой кнопкой и выбираем «Изменить букву». Выбираем любую свободную, например букву G. Нам сейчас нужно просто освободить букву C. Далее меняем букву диска D на C, и диска G на D:
Осталось применить изменения:
Итоги, что же получилось
Итак, мы создали новый пункт в меню загрузки, скопировали системные папки и поменяли буквы местами. Фишка в том, что теперь будут работать обе Windows, и та что осталась на диске C, текущая, будет по-прежнему «видеть» диски С и D так, как они есть сейчас. А если запустить скопированную Windows, то в ней вы увидите ваши диски «попутанные» местами.
Когда вы установите Windows 10 на диск C смело форматируйте раздел. Новая установка заменит в меню название старой Windows 7/8 на 10 и оставит наш новый пункт меню.
Но может быть проблема – скорей всего слетит активация копии винды. Можно заново переактивировать или ничего не делать, если она вам нужна ненадолго.
Я не нашёл более простого и «тупого» метода сделать всё это, а если вы знаете как можно ещё – отпишитесь пожалуйста в комментариях.