|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Копирование файла из одной папки в другую в определенные интервалы времени (bat) |
|
CMD/BAT - Копирование файла из одной папки в другую в определенные интервалы времени (bat)
|
Новый участник Сообщения: 2 |
Добрый день уважаемые форумчане
Знаю, что такую задачу можно реализовать, с помощью bat файла, но не знаю как его написать, поэтому обращаюсь к Вам за помощью Есть папки : Откуда : T:\Откуда Куда : C:\Users\UserName\Desktop\Куда Необходимо чтобы bat файл, в 09 :00, в 12:00 и в 17:00, делал копию файла Презентация.pptx, который находится в папке Откуда и помещал его в папку Куда, при этом архивировал его в zip архив. Название архива должно состоять из названия копируемого файла, в нашем случае, это Презентация и даты и времени копирования. Например Презентация_дата копирования_время копирования Буду признателен за Вашу помощь |
|
Отправлено: 15:48, 06-08-2019 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Iska,
Цитата Iska:
|
|
------- Последний раз редактировалось megaloman, 07-08-2019 в 19:17. Отправлено: 19:08, 07-08-2019 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 19:17, 07-08-2019 | #12 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Iska, В общем, корявство. Можно, конечно, сделать долгий слип, заведомо достаточный для конкретной задачи.
|
------- Отправлено: 19:21, 07-08-2019 | #13 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать megaloman, да, конечно.
|
Отправлено: 19:26, 07-08-2019 | #14 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Iska, pinguindell, Для себя делаю резюме:
Вариант без стороннего архиватора
Этот вариант не годится для размещения в планировщике, так как обязательно надо отследить завершение архивации. Строка
MsgBox "После окончания процесса записи в архив нажмите ОК" обязательна. FileIn = "Z:\Box_In\С Днем Рождения.ppt"
BoxArc = "Z:\Box_Arc"
With CreateObject("Scripting.FileSystemObject")
If Not .FileExists(FileIn) Then
WScript.Echo "!!! File " + FileIn + " not found"
WScript.Quit 1
End If
If Not .FolderExists(BoxArc) Then
WScript.Echo "!!! Folder " + BoxArc + " not found"
WScript.Quit 1
End If
DT = CStr(Year(Date)) + Right("0" + CStr(Month(Date)), 2) + Right("0" + CStr(Day(Date)), 2)
DT = DT + "-" + Right("0" + CStr(Hour(Time)), 2) + Right("0" + CStr(Minute(Time)), 2) + Right("0" + CStr(Second(Time)), 2)
Zip = BoxArc + "\" + .GetBaseName(FileIn) + "_" + DT + ".zip"
On Error Resume Next
Err.Number = 0
.CreateTextFile(Zip, True).Write "PK" + Chr(5) + Chr(6) + String(18, vbNullChar)
If Err.Number <> 0 Then
WScript.Echo "!!! " + Zip + " " + Err.Description + "(" + CStr(Err.Number) + ")"
WScript.Quit 1
End If
Err.Number = 0
Set App = CreateObject("Shell.Application")
Call App.Namespace(Zip).CopyHere(FileIn)
If Err.Number <> 0 Then
WScript.Echo "!!! " + Zip + " " + Err.Description + "(" + CStr(Err.Number) + ")"
WScript.Quit 1
End If
End With
On Error GoTo 0
MsgBox "После окончания процесса записи в архив нажмите ОК"
Как альтернатива, в предыдущем коде можно вставить заведомо бОльшее время ожидания чем требуется для завершения создания архива. Этот вариант можно поместить в планировщик. Раз архивирование делается с интервалом в часы, то и время ожидания можно поставить большое, например, 300 сек
MsgBox необходимо удалить .............. .............. Call App.Namespace(Zip).CopyHere(FileIn) WScript.Sleep 300 * 1000 If Err.Number <> 0 Then WScript.Echo "!!! " + Zip + " " + Err.Description + "(" + CStr(Err.Number) + ")" WScript.Quit 1 End If End With On Error GoTo 0 Вариант со сторонним архиватором, например, 7Z, запускаемым из-под vbs. Без проблем отработает в назначенных заданиях
FileIn = "Z:\Box_In\С Днем Рождения.ppt" BoxArc = "Z:\Box_Arc" Arc = "C:\Program Files\7-Zip\7z.exe" DT = CStr(Year(Date)) + Right("0" + CStr(Month(Date)), 2) + Right("0" + CStr(Day(Date)), 2) DT = DT + "-" + Right("0" + CStr(Hour(Time)), 2) + Right("0" + CStr(Minute(Time)), 2) + Right("0" + CStr(Second(Time)), 2) Zip = BoxArc + "\" + CreateObject("Scripting.FileSystemObject").GetBaseName(FileIn) + "_" + DT + ".zip" Comm = """" + Arc + """ a """ + Zip + """ """ + FileIn + """ -mx5" On Error Resume Next R = CreateObject("WScript.Shell").Run(Comm, 0, False) If Err.Number <> 0 Then WScript.Echo "Ошибка при вызове архиватора." + vbCrLf + vbCrLf + Comm + vbCrLf + vbCrLf + "Проверьте наличие файлов по указанным путям" + vbCrLf + Err.Description + "(" + CStr(Err.Number) + ")" WScript.Quit 1 End If On Error GoTo 0 |
------- Отправлено: 11:46, 08-08-2019 | #15 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать pinguindell, можно вообще обойтись без файла со сценарием в назначенных заданиях.
Но тут используется уже winrar c его возможностью добавлять к имени файла дату и время.
|
------- Отправлено: 15:09, 09-08-2019 | #16 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать *** let me Google that for you ***
$source_path = 'c:\Users\Serguei\Music\Folder with a ton of Music' $destination_path = 'c:\temp' $zip_filename = 'result' $zip_path = "${destination_path}\${zip_filename}.zip" [Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem') | out-null # create empty zip magic set-content $zip_path ( [byte[]] @( 80, 75, 5, 6 + (, 0 * 18 ) ) ) -encoding byte $source_folder = ( new-object -com 'Shell.Application' ).NameSpace( $source_path ) $zip_folder = ( new-object -com 'Shell.Application' ).NameSpace( $zip_path ) # запускаем на выполнение в диалог прогресс режиме, конца выполнения не ждём. $zip_folder.CopyHere( $source_folder, 16 ) $check_count = (get-childitem -path $source_path ).count $done = $false # вот теперь ждем по большому while ($done -eq $false){ try{ $check_zip = [IO.Compression.ZipFile]::OpenRead($zip_path) write-debug ('Counting items: {0}' -f ($check_zip.Entries).count ) if( ($check_zip.Entries).count -eq $check_count){ $check_zip.Dispose() $done = $true break } } catch [Exception] { } start-sleep -seconds 1 write-host '.' -nonewline } |
Отправлено: 22:03, 11-08-2019 | #17 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - копирование файлов из одной папки в другую cmd файлом через txt файл | Marina_Egorova | Скриптовые языки администрирования Windows | 1 | 15-03-2018 22:36 | |
Автоматическое копирование файлов из одной папки в другую. | another_user | Хочу все знать | 4 | 25-09-2015 12:50 | |
CMD/BAT - [решено] переместить указанное количество случайных файлов из одной папки в другую | Alexander_88 | Скриптовые языки администрирования Windows | 2 | 25-08-2014 21:46 | |
CMD/BAT - Копирование нескольких файлов из папки в другую с прошедшей датой | salmans | Скриптовые языки администрирования Windows | 5 | 06-08-2013 03:01 | |
CMD/BAT - [решено] смена размера копируемых файлов из одной папки в другую | Вовка13 | Скриптовые языки администрирования Windows | 4 | 10-09-2011 22:07 |
|