|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Robocopy и errorlevel |
|
Любой язык - [решено] Robocopy и errorlevel
|
Новый участник Сообщения: 7 |
Добрый день.
Нужно, чтобы при запуске скрипта, папки зеркально из разных директорий, копировались в другие директории, а при обнаружении ошибок cmd вставали на паузу и, в идеале, выводили описание ошибки. Вот сам скрипт: set source1=C:\Users\nameuser\AppData\... set target1=D:\Backup\AppData\... set source2=C:\Users\nameuser\... set target2=D:\Backup\... set source3=D:\Backup... set target3=E:\Backup... set source4=D:\... set target4=E:\... set source5=D:\test... set target5=E:\test... robocopy "%source1%" "%target1%" /NFL /COPY:DAT /DCOPY:T /R:10 /W:10 /MIR robocopy "%source2%" "%target2%" /NFL /COPY:DAT /DCOPY:T /R:10 /W:10 /MIR robocopy "%source3%" "%target3%" /NFL /COPY:DAT /DCOPY:T /R:10 /W:10 /MIR robocopy "%source4%" "%target4%" /NFL /COPY:DAT /DCOPY:T /R:10 /W:10 /MIR robocopy "%source5%" "%target5%" /NFL /COPY:DAT /DCOPY:T /R:10 /W:10 /MIR if [%errorlevel%] GTR [1] pause А еще я не понял, как сделать, чтобы errorlevel выводил сообщения ![]() Собственно, как сделать так, чтобы error level работал на все строчки, или, если знаете реализацию лучше, без использования cmd/robocopy - буду рада услышать. |
|
Отправлено: 17:54, 07-06-2024 |
fascinating rhythm Сообщения: 6562
|
Профиль | Отправить PM | Цитировать robocopy "%source1%" "%target1%" /NFL /COPY:DAT /DCOPY:T /R:10 /W:10 /MIR if [%errorlevel%] GTR [1] pause robocopy "%source2%" "%target2%" /NFL /COPY:DAT /DCOPY:T /R:10 /W:10 /MIR if [%errorlevel%] GTR [1] pause robocopy "%source3%" "%target3%" /NFL /COPY:DAT /DCOPY:T /R:10 /W:10 /MIR if [%errorlevel%] GTR [1] pause robocopy "%source4%" "%target4%" /NFL /COPY:DAT /DCOPY:T /R:10 /W:10 /MIR if [%errorlevel%] GTR [1] pause robocopy "%source5%" "%target5%" /NFL /COPY:DAT /DCOPY:T /R:10 /W:10 /MIR if [%errorlevel%] GTR [1] pause |
------- Отправлено: 20:46, 07-06-2024 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Собственно, так и сделал, временно но не уверен был, что реализация "правильная". Осталось как-нибудь добавить вывод описание ошибок
![]() Благодарю! |
Отправлено: 22:34, 07-06-2024 | #3 |
Deadooshka Сообщения: 2497
|
Профиль | Отправить PM | Цитировать поприличней вроде
@echo off set data1=C:\Users\nameuser\AppData\...;D:\Backup\AppData\... set data2=C:\Users\nameuser\...;D:\Backup\... set data3=D:\Backup...;E:\Backup... set data4=D:\...;E:\... set data5=D:\test...;E:\test... for /l %%N in (1,1,5) do ( for /f "tokens=1,2 delims=;" %%A in ('call echo %%data%%N%%') do ( robocopy "%%A" "%%B" /NFL /COPY:DAT /DCOPY:T /R:10 /W:10 /MIR if not errorlevel 0 pause )) |
Отправлено: 04:20, 08-06-2024 | #4 |
fascinating rhythm Сообщения: 6562
|
Профиль | Отправить PM | Цитировать Ещё лучше написать функцию, но я не знаю, как это делается в CMD.
Вот вариант для Powershell версии 3 и новее: function Copy-Robocopy ($from,$to) { $logFile = "$PSScriptRoot\$(Get-Date -f "yyyyMMdd-hhmmss")_$($from -replace '[^\d\w]').txt" robocopy $from $to /NFL /COPY:DAT /DCOPY:T /R:10 /W:10 /MIR /LOG:$logFile if ($LASTEXITCODE -ge 8) {Write-Host -fore Red "Ошибка при копировании, см. лог:`n$logFile"; pause} } Copy-Robocopy -from "C:\Users\nameuser\AppData\..." -to "D:\Backup\AppData\..." Copy-Robocopy -from "C:\Users\nameuser\..." -to "D:\Backup\..." Copy-Robocopy -from "D:\Backup..." -to "E:\Backup..." Copy-Robocopy -from "D:\..." -to "E:\..." Copy-Robocopy -from "D:\test..." -to "E:\test..." Лог пишется в ту же папку, где лежит <файл скрипта>.ps1 Кстати, успешное копирование в Робокопи - это коды возврата с 1 по 7 включительно. |
|
------- Отправлено: 07:40, 08-06-2024 | #5 |
Crazy Сообщения: 1176
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
|
|
------- Отправлено: 09:01, 08-06-2024 | #6 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Цитата Sham Sham:
@echo off ... set data5=D:\test...;E:\test... set data6=D:\1;E:\1 for /l %%N in (1,1,6) do ( for /f "tokens=1,2 delims=;" %%A in ('call echo %%data%%N%%') do ( robocopy "%%A" "%%B" /NFL /COPY:DAT /DCOPY:T /R:10 /W:10 /MIR if not errorlevel 0 pause )) Цитата DJ Mogarych DJ:
И в обоих вариантах, если в каталоге-назначения есть лишние папки/файлы, которых нет в исходном каталоге errorlevel не должны выдавать ошибку(код 2) и вставать на паузу? Собственно, в моем варианте, скрипт удаляет лишний каталог/файл и выдает--> ... ... robocopy "%source5%" "%target5%" /NFL /COPY:DAT /DCOPY:T /R:10 /W:10 /MIR if [%errorlevel%] GTR [1] pause ... ... C:\Windows\System32>if [2] GTR [1] pause Для продолжения нажмите любую клавишу . . . ![]() |
||
Отправлено: 10:51, 08-06-2024 | #7 |
fascinating rhythm Сообщения: 6562
|
Профиль | Отправить PM | Цитировать Цитата diablo.att:
$t = get-date -f "yyyyMMdd-HHmmss" function Copy-Robocopy ($from,$to) { $logFile = "$PSScriptRoot\${t}_robocopy_log.txt" robocopy $from $to /NFL /COPY:DAT /DCOPY:T /R:10 /W:10 /MIR /LOG+:$logFile if ($LASTEXITCODE -ge 8) {Write-Host -fore Red "Ошибка при копировании $from, см. лог:`n$logFile"; pause} } |
|
------- Отправлено: 14:51, 08-06-2024 | #8 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
|
|
Отправлено: 21:33, 08-06-2024 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Множественные условия с получением %ERRORLEVEL% | POSTREALITY | Скриптовые языки администрирования Windows | 2 | 18-10-2017 22:51 | |
CMD/BAT - [решено] robocopy errorlevel | Опиум | Скриптовые языки администрирования Windows | 21 | 14-03-2017 20:50 | |
CMD/BAT - [решено] Корректное возвращение Errorlevel | hunk3r | Скриптовые языки администрирования Windows | 13 | 25-05-2015 18:56 | |
errorlevel msp | sov44 | Хочу все знать | 15 | 29-07-2013 12:17 | |
Cmd Параметр ERRORLEVEL | storm2005 | Microsoft Windows NT/2000/2003 | 1 | 30-03-2007 18:49 |
|