Показать полную графическую версию : CMD Перемещение каталогов с длинными именами.
deluxe9999
11-01-2018, 14:58
Здравствуйте всем!
Помогите пожалуйста с созданием BAT-ника для автоматизации.
На работе один сервер каждый день генерирует папку с файлами (Info_User data_2018-1-9-8-2-17_ImmdTask12-Compressed) в 8:00 утра.
Пароль и логин сервера, простым юзерам небезопасно. Нужно чтобы один компьютер перемещал ежедневные генерированные папки с определенным именем с сервера на свою директорию.
Но так как данное имя папки ежедневно меняется структура * в move не работает. При копирование с XCOPY копируется все данные включая и старые папки сгенерированные в прошлые дни.
Хотелось бы чтобы перемещались папки а не копировались, как указал ниже?
Xcopy /E /S /I /Y \\10.1.0.1\d$\data\Info* D:\test\info_%date%
Xcopy /E /S /I /Y \\10.1.0.2\d$\data\Info* D:\test\info_%date%
deluxe9999
18-01-2018, 15:42
Код:
robocopy /? »
Если не будет вам сложно, можно чуток по подробнее для новичка по CMD так как у robocopy много функций, затеряться можно?
megaloman
18-01-2018, 16:18
,deluxe9999, Нужно чтобы один компьютер перемещал ежедневные генерированные папки с определенным именем с сервера на свою директорию. » Зачем это нужно, для хранения или для текущей работы?сервер каждый день генерирует папку с файлами (Info_User data_2018-1-9-8-2-17_ImmdTask12-Compressed) »Что обозначают цифры в имени папки?перемещал ежедневные генерированные папки с определенным именем с сервера на свою директорию. » Что Вы имеете ввиду под определённым?
И, кстати,При копирование с XCOPY копируется все данные включая и старые папки сгенерированные в прошлые дни. »
У xcopy есть ключ /d, который позволяет пропустить копирование старых файлов, но при этом необходимо копировать файлы в одну и ту же папку, либо явно указывать дату/D:m-d-y - Копирование файлов, измененных не ранее указанной даты. Если дата не указана, заменяются только конечные файлы, более старые, чем исходные.
deluxe9999
19-01-2018, 15:28
Зачем это нужно, для хранения или для текущей работы?
Цитата deluxe9999: »
Добрый день!
Нужны для хранения данных.
а) Цифры в папках это даты которое при ежедневном генерации данных сервер создает.
б) Под определённым имею ввиду то, что сервер создает папки с лишними информация ми, нужно после перемещения примерно называлась "papka_%data%"
megaloman
19-01-2018, 15:57
Нужны для хранения данных. »Почему бы не использовать архиватор? Существенная экономия места даже при низком уровне сжатия.Цифры в папках это даты которое при ежедневном генерации данных сервер создает. » Сегодня 19.01.2018. Как называется папка которую надо архивировать?
deluxe9999
19-01-2018, 16:03
Нужны для хранения данных. »
Почему бы не использовать архиватор? Существенная экономия места даже при низком уровне сжатия. »
Было бы круто с архивированием папку под именем %VLR_дата%.
deluxe9999
19-01-2018, 16:12
папка под именем VLR
megaloman
19-01-2018, 17:25
deluxe9999@Echo Off
cls
Set "BoxIn=Z:\Box_In\VLR"
Set "BoxArc=Z:\Box_Arc"
Set "ArcName=VLR_"
Set "Arc=%ProgramFiles%\WinRar\WinRar.exe"
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d"
Set "Tdate=%Tdate:~0,8%"
"%Arc%" a -r -m1 -df -ta%Tdate%000000 -ag%Tdate% "%BoxArc%\%ArcName%" "%BoxIn%\*.*"Вы не расшифровали имя папкисервер каждый день генерирует папку с файлами (Info_User data_2018-1-9-8-2-17_ImmdTask12-Compressed) »На мои непристойные домогательства Вы ответили папка под именем VLR »Вам бы Хотелось бы чтобы перемещались папки а не копировались »В моём скрипте применяю архиватор Rar. За удаление архивированных файлов отвечает выделенный ключ -df, если этого не нужно, удалите этот ключ.
Укажите свои пути к архивируемой папке, архивной папке и путь к архиватору, если он отличается от стандартного.
Скрипт архивирует в указанной папке все файлы за сегодня, заархивированные файлы удаляются (если Вы не передумаете).
Имя архива имеет вид VLR_ГГГГММДД@Echo Off
cls
Set "BoxIn=Z:\Box_In\VLR"
Set "BoxArc=Z:\Box_Arc"
Set "ArcName=VLR_"
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d"
Set "Tdate=%Tdate:~0,8%"
Set "DXcopy=%TDate:~4,2%-%TDate:~6,2%-%TDate:~0,4%"
Pushd "%BoxIn%"
Xcopy /S /I /Y /F /D:%DXcopy% *.* "%BoxArc%\%ArcName%%TDate%"
Popd
@Echo Off
cls
Set "BoxIn=Z:\Box_In\VLR"
Set "BoxArc=Z:\Box_Arc"
Set "ArcName=VLR_"
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d"
Set "Tdate=%Tdate:~0,8%"
Set "DXcopy=%TDate:~4,2%-%TDate:~6,2%-%TDate:~0,4%"
Pushd "%BoxIn%"
FOR /F "usebackq tokens=1,2 delims=>" %%i In (`xcopy /S /I /Y /F /D:%DXcopy% *.* "%BoxArc%\%ArcName%%TDate%"`) DO Call :DelCopy "%%i" "%%j"
Popd
GoTo :Eof
:DelCopy
If "%~2"=="" GoTo :Eof
Set "File1=%~1"
Set "File1=%File1:~0,-2%"
Set "File2=%~2"
Set "File2=%File2:~1,9999%"
If Exist "%File2%" Del "%File1%"
GoTo :Eof
Пустые папки не рискнул удалять, не зная задачи подробно
deluxe9999
22-01-2018, 08:40
Спасибо большое за Ваш отклик. Так как суббота и воскресенье не рабочий день. Попробую сегодня и дам Вам свой результат.
deluxe9999
24-01-2018, 13:44
Копирование за сегодня с удалением исходных файлов
Код:
@Echo Off
cls
Set "BoxIn=Z:\Box_In\VLR"
Set "BoxArc=Z:\Box_Arc"
Set "ArcName=VLR_"
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d"
Set "Tdate=%Tdate:~0,8%"
Set "DXcopy=%TDate:~4,2%-%TDate:~6,2%-%TDate:~0,4%"
Pushd "%BoxIn%"
FOR /F "usebackq tokens=1,2 delims=>" %%i In (`xcopy /S /I /Y /F /D:%DXcopy% *.* "%BoxArc%\%ArcName%%TDate%"`) DO Call :DelCopy "%%i" "%%j"
Popd
GoTo :Eof
:DelCopy
If "%~2"=="" GoTo :Eof
Set "File1=%~1"
Set "File1=%File1:~0,-2%"
Set "File2=%~2"
Set "File2=%File2:~1,9999%"
If Exist "%File2%" Del "%File1%"
GoTo :Eof
Пустые папки не рискнул удалять, не зная задачи подробно »
Ссори не совсем получается когда указываю сетевой путь
\\172.28.246.10\d$\VLROutPut\* --> сетевой путь откуда брать
D:\Stat\VLR_ --> папка для хранения
насчёт удалении можно все что находится в той папке удалять.
megaloman
24-01-2018, 16:29
\\172.28.246.10\d$\VLROutPut\* » так делать низьзя!
Можно Set "BoxIn=\\172.28.246.10\d$\VLROutPut"
Set "BoxArc=D:\Stat\VLR_"в имени папки подстановочных знаков быть не может
Подозреваю, что не надо указывать подпапку, которую я выделил в Вашем пути красным цветом.
Она указывается в Set "ArcName=VLR_"К VLR_ добавляется дата.
deluxe9999
25-01-2018, 11:17
Код:
Set "BoxIn=\\172.28.246.10\d$\VLROutPut"
Set "BoxArc=D:\Stat\VLR_"
в имени папки подстановочных знаков быть не может
Подозреваю, что не надо указывать подпапку, которую я выделил в Вашем пути красным цветом.
Она указывается в »
Заработало спасибо!
Немного еще Вас побеспокою.
Если путей будет 2 или 3 есть возможность в скрипте сгруппировать, а не по отдельности вписывать скрипт каждому пути?
И как по возможности запаковать каждый в отдельный архив?
Возможно в скрипте чуток я почудил ))
Код:
Set "BoxIn1=\\172.28.246.10\d$\VLROutPut"
Set "BoxIn2=\\172.28.246.210\d$\VLROutPut"
Set "BoxArc=D:\Stat"
Set "ArcName=VLR_"
Set Rar="C:\Program Files (x86)\WinRAR\WinRAR.exe" a -r -df
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d"
Set "Tdate=%Tdate:~0,8%"
Set "DXcopy=%TDate:~4,2%-%TDate:~6,2%-%TDate:~0,4%"
Pushd "%BoxIn1%"
FOR /F "usebackq tokens=1,2 delims=>" %%i In (`xcopy /S /I /Y /F /D:%DXcopy% *.* "%BoxArc%\%ArcName%%TDate%"`) DO Call :DelCopy "%%i" "%%j"
Popd
Pushd "%BoxIn2%"
FOR /F "usebackq tokens=1,2 delims=>" %%i In (`xcopy /S /I /Y /F /D:%DXcopy% *.* "%BoxArc%\%ArcName%%TDate%"`) DO Call :DelCopy "%%i" "%%j"
Popd
megaloman
25-01-2018, 12:13
@Echo Off
cls
Set "Arc=%ProgramFiles%\WinRar\WinRar.exe"
If Exist "C:\Program Files (x86)\WinRAR\WinRAR.exe" Set "Arc=C:\Program Files (x86)\WinRAR\WinRAR.exe"
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d"
Set "Tdate=%Tdate:~0,8%"
Call :Archives "Z:\172.28.246.10\d$\VLROutPut" "Z:\Stat" "VLR_172.28.246.10_"
Call :Archives "Z:\172.28.246.210\d$\VLROutPut" "Z:\Stat" "VLR_172.28.246.210_"
GoTo :Eof
:Archives
"%Arc%" a -r -m1 -df -Y -ed -ta%Tdate%000000 -ag%Tdate% "%~2\%~3.rar" "%~1\*.*"
GoTo :Eof
Если без архивирования и с удалением пустых папок, то @Echo Off
cls
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d"
Set "Tdate=%Tdate:~0,8%"
Set "DXcopy=%TDate:~4,2%-%TDate:~6,2%-%TDate:~0,4%"
Call :Archives "Z:\172.28.246.10\d$\VLROutPut" "Z:\Stat" "VLR_172.28.246.10_"
Call :Archives "Z:\172.28.246.210\d$\VLROutPut" "Z:\Stat" "VLR_172.28.246.210_"
GoTo :Eof
:Archives
Pushd %1
FOR /F "usebackq tokens=1,2 delims=>" %%i In (`xcopy /S /I /Y /F /D:%DXcopy% *.* "%~2\%~3%TDate%"`) DO Call :DelCopy "%%i" "%%j"
For /F "Tokens=*" %%i In ('Dir /B /S /A:D 2^>nul^|Sort /R') Do RD "%%i" 2>nul
Popd
GoTo :Eof
:DelCopy
If "%~2"=="" GoTo :Eof
Set "File1=%~1"
Set "File1=%File1:~0,-2%"
Set "File2=%~2"
Set "File2=%File2:~1,9999%"
If Exist "%File2%" Del "%File1%"
GoTo :Eof
deluxe9999
30-01-2018, 08:37
Если путей будет 2 или 3 есть возможность в скрипте сгруппировать, а не по отдельности вписывать скрипт каждому пути?
И как по возможности запаковать каждый в отдельный архив? »
Спасибо огромное! Сработало.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.