- Create Script To Copy Files From One Folder To Another On Win10 [MiniTool News]
- Summary :
- Can You Use Script to Copy Files from One Folder to Another
- What Is Batch File
- How to Use Batch File to Copy Files
- Stage One: Create Batch File
- Stage Two: Create Task to Run Batch File
- ABOUT THE AUTHOR
- Блог о Linux и Windows
- Записки по настройке Debian Ubuntu и Microsoft Windows
- Скрипт для копирования файлов с проверкой и записью в лог-файл
- Скрипт для копирования файлов с проверкой и записью в лог-файл
- Твой Сетевичок
- Все о локальных сетях и сетевом оборудовании
- Cкрипт для копирования файлов из одной папки в другую
- vbs скрипт копирования файлов по локальной сети
- Скрипт копирования файлов и папок по сети
- Использование Robocopy для синхронизации и резервного копирования файлов, примеры
- Основные возможности Robocopy
- Синтаксис и параметры robocopy
- Использование robocopy для зеркалирования каталогов
- Инкрементальное копирование с помощью robocopy
- Robocopy: перемещение файлов
- Пример использование robocopy в планировщике задач
- Отслеживание изменений в каталогах с помощью robocopy
- Коды возврата (ошибки) robocopy
Create Script To Copy Files From One Folder To Another On Win10 [MiniTool News]
By Sarah | Follow | Last Updated March 31, 2021
Summary :
The batch script, also known as batch file, actually refers to a list of several commands; whenever you double-click the file, the commands will be executed. If you want to copy files or folders from one folder to another automatically, creating a batch script is a nice choice. As for how to get the work done, please keep reading.
When managing your data on PC, you may need to copy or move files and folders. The permissions set on files and folders may be changed when you move/copy them by using the Windows Explorer. Did you know this?
For instance, when you copy a folder/file in an NTFS partition or from one partition to another, the Windows system will regard it as the new folder/file; in this way, you will become the CREATOR OWNER since the system will take on the permissions. That’s why using script to copy files from one folder to another is necessary.
Can You Use Script to Copy Files from One Folder to Another
The Windows clipboard provides an easy way for users to copy and paste files/folder manually. The ordinary copy process seems pretty simple: select the file/folder that needs to be copied and choose copy option; open the destination; select the paste option.
Yet, do you want to automatically move files from one folder to another? The copying and pasting process can be finished quickly by using the Windows command line.
What Is Batch File
A batch file, also known as batch script, is actually a list of commands that will be run in the Command Prompt (CMD) tool. Users can create a batch file to let CMD copy and paste files for them automatically; all they need to do is double clicking on the batch file/script and waiting.
How to Use Batch File to Copy Files
How to use Windows script to copy files? Generally, it contains two stages: create batch file and create a task to run the batch file to copy files from one folder to another.
Stage One: Create Batch File
The following steps are finished on a Windows 10 computer.
Step one: click on the Cortana icon on the taskbar (fix taskbar not working on Window 10).
Step two: type notepad into the search text box.
Step three: select Notepad app from the search result by clicking on it.
Step four: type the following script in or copy & paste it into Notepad.
@echo off
set X=
set «source=C:\ «
set «destination=D:\ «
robocopy «%source%» «%destination%» /mov /minage:%X%
exit /b
Of course, the source folder, destination folder, and number of days can be changed due to your needs.
Step five: choose File option from the menu bar and choose Save As… from submenu.
Step six:
- Give it a name and type in the File name text box; the file name format is .BAT.
- Select All Files for Save as type option to change the default file type.
- Click on the Save button at the bottom to finish this step.
Stage Two: Create Task to Run Batch File
After finish this stage, you can use the batch file to copy folder to another location.
Step one: type task scheduler into the Cortana search box.
Step two: choose Task Scheduler from the search result.
Step three: find Actions section from the right-hand panel.
Step four: select Create Task… from the list.
Step five: give a name for the task and type it into the text box after Name.
Step six: shift to Triggers tab and click on the New… button.
Step seven: define the frequency to trigger the task, choosing from One time, Daily, Weekly, and Monthly.
Step eight: set the Start time to decide when the task will be triggered and click on the OK button to confirm.
Step nine: shift to Actions tab and click on the New… button.
Step ten: click on the Browse button to find & choose the .BAT file you have created in stage one.
Step eleven: click on the OK button to confirm. Then, you can close the Task Scheduler and start to move file from one folder to another by using it.
That’s how to use Windows batch to copy file.
ABOUT THE AUTHOR
Position: Columnist
Sarah is working as editor at MiniTool since she was graduated from university, having rich writing experiences. Love to help other people out from computer problems, disk issues, and data loss dilemma and specialize in these things. She said it’s a wonderful thing to see people solving their problems on PC, mobile photos, and other devices; it’s a sense of accomplishment. Sarah likes to make friends in life and she’s a huge music fan.
Блог о Linux и Windows
Записки по настройке Debian Ubuntu и Microsoft Windows
Скрипт для копирования файлов с проверкой и записью в лог-файл
Скрипт для копирования файлов с проверкой и записью в лог-файл
robocopy (от англ. Robust File Copy) — утилита командной строки для репликации (не просто копирования) каталогов (папок). Она была доступна как часть Windows Resource Kit и представлена как стандартный компонент Windows Vista, Windows 7 и Windows Server 2008.
Что выполняет скрипт:
— копирует файлы из заданной папки;
— с введение лога, пишим имена скопированных файлов;
— и перед следующим копированием сверяем с записью в логах, если есть файл в логах — то его не копируем, если в логах отсутствует — копируем.
:: ( кодировка Dos 866 если имеется названия папок по русски )
@Echo off
:: ( путь откуда, без кавычек)
set $from=_ПУТЬ_ОТКУДА_
:: ( куда, без кавычек )
set $dest=_КУДА_
::
set $log=_ПУТЬ_ЛОГ_ФАЙЛА\copyfile.log
for /f «delims=» %%i in (‘dir «%$from%» /B/A:-D’) do Call :CheckLog «%%i»
:CheckLog
If Exist «%$log%» For /f «delims=» %%a in (%$log%) Do If «%%a»==»%
1″ Exit /B
robocopy «%$from%» «%$dest%» «%
1″ /minage:0
if %errorlevel%==1 (echo.Copy is successful — %
/MINAGE:n :: Минимальный возраст файла — исключить файлы, возраст которых менее n дней.
p.s.s Утилита robocopy это отличнейшая вещь, очень гибкий инструмент копирования и бэкапа. Вот не больший пример для backup
> robocopy С:\исходная_папка \192.168.0.1\целевая_папка /E /Z /COPY:TDASO /DCOPY:T /M /R:2 /W:5
В данном примере:
Мы копируем папку «исходная папка», находящуюся на локальном диске С:
Мы копируем эту папку на компьютер \192.168.0.1 в папку «целевая папка»
/E : Мы копируем все подпапки и файлы
/Z : Включаем поддержку докачки (на случай обрыва связи)
/COPY:TDASO : Копируем все атрибуты и ACL прав доступа NTFS (но не копируем атрибуты аудита)
/DCOPY:T : Копируем время создания папок
/M : Копируем только файлы с установленным атрибутом «A — Архивный» и сбрасываем этот атрибут, что позволяет нам копировать только измененные файлы.
/R : Количество повторных попыток копирования файла в случае, если копирование не удалось. Причем «не удалось» срабатывает и в том случае, если доступ к файлу закрыт. По-умолчанию = 1 бесконечно, потому копирование благополучно встанет на первом же файле, к которому не будет доступа.
/W : Задержка в секундах между попытками копирования. По-умолчанию = 30 секундам.
Заметка. Очень рекомендую задавать вручную параметры /R и /W, иначе при автоматической синхронизации она попросту зависнет, встретив на своем пути ошибку доступа.
Твой Сетевичок
Все о локальных сетях и сетевом оборудовании
Cкрипт для копирования файлов из одной папки в другую
Копировать большое количество файлов с компьютера на компьютер по локальной сети — дело долгое и однообразное, и после первого часа такой рутинной работы она становится просто невыносимой и хочется, наконец, её автоматизировать. В этом может помочь простейший скрипт копирования файлов по сети, который и будет выполнять большинство действий за вас.
Ниже будет представлены 2 скрипта, использующие «язык VBS», для элементарного перемещения файла из одной сетевой папки, (она конечно же, должна быть «расшарена») в другую.
vbs скрипт копирования файлов по локальной сети
- Данный скрипт подойдет для поштучного перемещения файлов из одной папки в другую:
WScript.Echo «Готово.» # данные строки выводят текстовое уведомление/сообщение
WScript.Quit(0)
Dim fso
Set fso = CreateObject(«Scripting.FileSystemObject»)
fso.CopyFile «\\1-4ffc2e2aa3494\1\Рабочий стол\Test\1.vbs «, # в данной строке указывается адрес папки, из которой будет производиться копирование
«C:\Documents and Settings\Администратор\Рабочий стол\Test» #адрес папке куда будет копироваться файл.
Скрипт копирования файлов и папок по сети
- Для того чтобы скопировать всё содержимое папки используется следующий скрипт:
WScript.Quit(0)
Const OverWriteFiles = True # три нижние строки определяют параметры копирование всех файлов в из папки
Set objFSO = CreateObject(«Scripting.FileSystemObject»)
objFSO.CopyFolder «\\1-4ffc2e2aa3494\1\Рабочий стол\Test» ,
» C:\Documents and Settings\Администратор\Рабочий стол\Test \» , OverWriteFiles
Как видите, скрипт наилегчайший. Вам останется только создать текстовый документ, скопировать код и изменить его адреса в соответствии с вашей сетью (а именно те строки, где находятся адреса откуда и куда нужно скопировать файлы). После этого требуется сохранить скрипт с английской раскладкой и разрешением «.vbs».
Если копируемые файла требуется обновлять постоянно, можно полностью автоматизировать данный процесс, создав в «Планировщике задач» сценарий и выставить в параметрах временные интервалы.
Данные скрипты являются одними из самых элементарных. Можно воспользоваться «Командной строкой» и командной «xcopy /?».
После запуска команды вы можете выбрать те параметры, которые вам необходимы, и после этого создать собственный скрипт.
Использование Robocopy для синхронизации и резервного копирования файлов, примеры
Robocopy – это консольная утилита Windows для копирования файлов, которую можно использовать для синхронизации/репликации файлов и каталогов, и в сценариях резервного копирования. Robocopy (Robust File Copy) доступна начиная с Windows NT 4.0 Resource Kit, но по умолчанию эта функция появилась только в Windows Vista и Windows Server 2008. Robocopy заменяет Xcopy и copy, как более функциональная.
Основные возможности Robocopy
Кроме обычного копирования файлов и папок из папки источника в каталог назначения, в Robocopy есть множество очень полезных функций:
- Устойчивость к обрывам сети (robocopy может продолжить копирования после восстановления сетевого доступа);
- Корректное копирование файлов с их атрибутами и NTFS правами доступа;
- Копирование с сохранением исходной временной метки;
- Возможность копирования файлов и директорий, запрещенных для доступа даже администратору, с помощью ключа /B (ключ позволяет игнорировать проверку прав доступа, ключ доступен только для участников группы Администраторы или Операторы архива);
- Возможность задать количество попыток копирования файла, если файл недоступен;
- Режим полного зеркалирования директорий;
- Пропуск уже существующих файлов (с одинаковым размером или временной меткой timestamp);
- Индикатор прогресса копирования;
- Корректная работа с длинными путями (более 260 символов);
- Эффективные алгоритмы и многопоточность позволяют выполнять копирование файлов намного быстрее, чем обычное копирование средствами Windows;
- Поддержка коды возврата (что позволяет использовать robocopy в различных внешних скриптах и утилитах).
Официальной графической версии robocopy (c GUI) от Microsoft нет. Существуют пользовательские версии, но их поддержка прекращена. Список неофициальных GUI для robocopy (это сторонние программы):
Синтаксис и параметры robocopy
Robocopy имеет много параметров, которые на первый взгляд могут показаться сложными, но имея под рукой документацию, вы с легкостью разберетесь и сможете править скрипты под себя.
Синтаксис robocopy состоит из двух обязательных параметров (исходный и целевой каталог) и двух необязательных (фильтр файлов и параметры):
robocopy [фильтр файлов] [параметры]
Поддерживаются как локальные пути, так и UNC, например, \\server\directory
Полный синтаксис утилиты robocopy (все параметры и их описания) доступны по команде:
Поскольку ключей в robocopy много, мы будем рассматривать их на практике, в готовых командах. Мы не будем рассматривать самые простые примеры использования robocopy, т.к. обычно они не вызывают вопросов. Ниже представлены готовые к применению более сложные команды robocopy, которые можно использовать в реальных сценариях.
Использование robocopy для зеркалирования каталогов
Вы можете зеркалировать (синхронизировать) содержимое двух каталог с помощью следующей команды robocopy (под зеркалированием понимается копирование файлов из целевой папки с удалением файлов в целевом каталоге, если они удалены в источнике).
robocopy \\testnode1\C$\source\ \\testnode2\c$\dest\ *.txt /MIR /COPYALL /Z /B /J /R:3 /W:1 /REG /TEE /LOG+:%appdata%\robocopy.log
- \\testnode1\C$\source\ — исходный каталог, откуда копируются файлы
- \\testnode2\C$\dest\ — каталог назначения, куда скопируются файлы
- *.txt – фильтр файлов. Синхронизируются только .txt файл и директории.
- /MIR – полное зеркалирование данных в source и dest директориях. Файлы, удаленные из source директории или не присутствующие в ней, также будут удалены из dest. Если вы хотите, чтобы удаленные из source файлы оставались в dest, то поменяйте параметр /MIR на /E
- /COPYALL – копирует всю информацию о файле (Атрибуты, параметры безопасности и т.д.). Как альтернатива, можно применять флаг /COPY:DT для копирования timestamp, а не всей информации. /COPALL требует прав администратора
- /Z – robocopy продолжит копирование файла при обрыве. Полезно при копировании больших файлов (неплохая альтернатива копированию файлов по BITS)
- /B – позволяет robocopy избегать ошибки access denied error. В этом режиме robocopy игнорирует все права на файлы, которые могли бы помешать прочитать/записать файл. Этот режим требует прав администратора либо участие в группе Операторы архива
- /J – Копирование без буфера (файлового кэша, оперативной памяти). Эффективно для больших файлов.
- /R:3 – количество попыток скопировать недоступный файл. Значение по умолчанию – миллион, поэтому необходимо его сменить.
- /W:1 – секунды между попытками скопировать недоступный файл. Значение по умолчанию – 30 секунд.
- /REG – сохранить текущие значения ключей /R и /W в реестр как стандартные, для будущих вызовов robocopy.
- /TEE – разделение вывода работы команды и в лог файл, и в консоль. При фоновом вызове robocopy (например, из планировщика задача) этот параметр можно убрать, оставив только /LOG
- /LOG – путь к файлу лога
Обратите внимание на ключ /Z даже если вы копируете небольшие файлы по устойчивому каналу. Он не несёт дополнительных расходов при использовании, но в случае обрыва, вы сможете продолжить копирование просто повторно запустив скрипт.
Инкрементальное копирование с помощью robocopy
Сам по себе robocopy не может полностью обеспечить инкрементальное резервное копирование каталога (копирование новых и измененных файлов), для этого мы будем использовать небольшой bat скрипт:
- set date_=%date:/=-% — эта строчка присваивает значение переменной date_ в формате DD.MM.YYYY
- /maxage:1 — Максимальный возраст файла. Исключает файлы старше N дней или даты. Дата указывается в формате YYMMDD, например, /maxage:20200421
- /E – копирует подпапки, без ограничения уровня вложенности. Для контроля уровня вложенности директорий можно использовать параметр /lev, например, /lev:3
Инкрементальность осуществляется за счёт параметра /maxage:1 — файлы старше суток копироваться не будут. Для первого, “базового” копирования, можно выполнить этот скрипт без параметра /maxage.
Robocopy: перемещение файлов
С помощью ключа /mov или /move вы можете переместить файлы (а точнее удалить успешно скопированные файлы из исходной директории):
robocopy C:\source\ F:\dest\ /MOVE /E /COPYALL /Z /B /J /R:3 /W:1 /REG /TEE /LOG+:%appdata%\robocopy.log
- /MOVE – удалить файлы и директории из исходной папки, после того как они были скопированы. Имейте в виду, что этот ключ нужно использовать вместе с /E или /S, в противном случае вы перенесете только файлы, но не директории. Если вы хотите перенести только файлы, используйте ключ /MOV
- Если вы используете ключ /MOVE с ключом /E, то вы перенесете все файлы, директории (включая файлы внутри них) и пустые директории. Файлы и директории удалятся из исходной папки. /MOVE с /S даст такой же результат, но пустые директории не перенесутся и будут удалены.
- Если вы используете ключ /MOV с ключом /E, то вы перенесете все файлы, включая те, которые находятся в директориях и поддиректориях, также скопируются все директории (включая пустые), но они не будут удалены из исходного каталога, в отличие от файлов. Используя /MOV с /S, вы получите такой же результат, но пустые директории не будут скопированы.
Пример использование robocopy в планировщике задач
Для примера возьмём задачу: нам необходимо с помощью robocopy регулярно синхронизировать содержимое сетевой папки между двумя серверами с ведением логов.
- Исходный путь — \\testnode1\C$\source
- Целевая директория- \\testnode2\C$\source
Запустите командную строку с правами администратора и введите: compmgmt.msc
Перейдите в System Tools -> Task Scheduler Library. Создайте новое задание планировщика (Create task).
Укажите имя задания, и выберите пользователя из-под которого будет выполняться задание. Пользователь должен иметь доступ на чтению и запись в обоих каталогах (при копировании по сети между серверами домена можно использовать аккаунт System, в этом случае нужно предоставить на целевой каталог права RW для объекта computer сервера-источника) .
Выберите опцию Run whether user is logged on or not, для того чтобы задание выполнялось в фоновом режиме. Также отметьте Run with highest privileges. Эта опция сработает если аккаунт из-под которого выполняется задание, будет иметь права администратора.
Перейдите на вкладку Triggers и создайте новый триггер.
Выберите параметр On a schedule (по расписанию), выберите время начала и отметьте Repeat task every, указав интервал выполнения. В моём случае это 5 минут – каждые 5 минут, начиная с часа дня 22 апреля (обязательно измените эту дату на ту, которая нужна вам), директории будут синхронизированы. В for a duration of поставьте Indefinitely (бесконечно)
Перейдите во вкладку Actions и нажмите New…
Выберите Start a program, и укажите путь к .bat скрипту.
Содержание robocopy-mirror.bat:
Помимо журнала выполнения задания планировщика, robocopy будет писать собственный лог файл копирования в C:\robocopy.log. Если аккаунт из-под которого будет выполняться скрипт не имеет прав администратора, смените C:\robocopy.log на нужный вам путь.
Остальные настройки заполнять не надо. После нажатия на кнопку ОК, вас попросит ввести пароль от учетной записи, которую вы выбрали для запуска задания.
Если вы всё настроили правильно, директории должны начать синхронизироваться.
Если у вас возникли проблемы с выполнением скрипта, то обязательно проверьте вкладку History вашей задачи
Отслеживание изменений в каталогах с помощью robocopy
В robocopy есть встроенный механизм отслеживания изменений в исходном каталоге (и их последующего копирования) и встроенный планировщик – параметры /mon и /mot .
- /mon:N – проверяет исходную директорию на предмет изменений каждую 1 минуту, и если изменений в директории больше чем N, то будет произведено копирование в целевую директорию. Если задан параметр /mot:Y, то изменения будут проверяться каждые Y минут.
- /mot:N – проверяет исходную директорию на предмет изменений каждые N минут. Минимальное значение N = 1, в минутах. Если параметр /mon не задан, то будет считаться что /mon:1
.bat скрипт для зеркалирования с отслеживанием изменений с интервалом в 1 минуту. Этот скрипт нужно запускать из-под аккаунта с правами администратора.
Плюсы:
- Не нужно создавать задание в планировщике задач
- Подходит для непостоянного выполнения. Например, в течение нескольких часов, в таком случае запустить скрипт руками через CMD проще, чем создавать задание в планировщике
Минусы:
- Чтобы запустить .bat скрипт в фоновом режиме, нужно либо использовать VBS скрипт, либо стороннее ПО, например, NirCmd.
- Минимальный интервал поиска изменений и копирования – 1 минута. Для меньшего интервала нужно использовать PowerShell или bat скрипт.
Коды возврата (ошибки) robocopy
Ниже приведены стандартные коды возврата robocopy, которые можно использовать для обработки различных ошибок, которые возвращает утилита после выполнения действия копирования (кот возврата эта битовая маска).
Hex | Decimal | Meaning if set |
0x00 | 0 | No errors occurred, and no copying was done. The source and destination directory trees are completely synchronized. |
0x01 | 1 | One or more files were copied successfully (that is, new files have arrived). |
0x02 | 2 | Some Extra files or directories were detected. No files were copied Examine the output log for details. |
0x04 | 4 | Some Mismatched files or directories were detected. Examine the output log. Housekeeping might be required. |
0x08 | 8 | Some files or directories could not be copied (copy errors occurred and the retry limit was exceeded). Check these errors further. |
0x10 | 16 | Serious error. Robocopy did not copy any files. Either a usage error or an error due to insufficient access privileges on the source or destination directories. |
Коды возврата могут комбинироваться: | ||
0x03 | 3 | (2+1) Some files were copied. Additional files were present. No failure was encountered. |
0x05 | 5 | (4+1) Some files were copied. Some files were mismatched. No failure was encountered. |
0x06 | 6 | (4+2) Additional files and mismatched files exist. No files were copied and no failures were encountered. This means that the files already exist in the destination directory |
0x07 | 7 | (4+1+2) Files were copied, a file mismatch was present, and additional files were present. |
Любое значение больше 7 говорит о том, что при копировании через robocopy возникла ошибка. Вы можете обрабатывать эти ошибки в bat файле:
if %ERRORLEVEL% EQU 16 echo ***FATAL ERROR*** & goto end
if %ERRORLEVEL% EQU 15 echo OKCOPY + FAIL + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 14 echo FAIL + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 13 echo OKCOPY + FAIL + MISMATCHES & goto end
if %ERRORLEVEL% EQU 12 echo FAIL + MISMATCHES& goto end
if %ERRORLEVEL% EQU 11 echo OKCOPY + FAIL + XTRA & goto end
if %ERRORLEVEL% EQU 10 echo FAIL + XTRA & goto end
if %ERRORLEVEL% EQU 9 echo OKCOPY + FAIL & goto end
if %ERRORLEVEL% EQU 8 echo FAIL & goto end
if %ERRORLEVEL% EQU 7 echo OKCOPY + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 6 echo MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 5 echo OKCOPY + MISMATCHES & goto end
if %ERRORLEVEL% EQU 4 echo MISMATCHES & goto end
if %ERRORLEVEL% EQU 3 echo OKCOPY + XTRA & goto end
if %ERRORLEVEL% EQU 2 echo XTRA & goto end
if %ERRORLEVEL% EQU 1 echo OKCOPY & goto end
if %ERRORLEVEL% EQU 0 echo No Change & goto end
:end
Утилита robocopy имеет огромный функционал и позволяет гибко настроить операции копирования. Как альтернативу robocopy в PowerShell можно использовать командлет Copy-Item, который хоть и менее функционален, но работает с объектной моделью PowerShell, что может быть важно, если вы часто используете PowerShell или используете цепочки автоматизации с другими языками программирования.