Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   CMD Перемещение каталогов с длинными именами. (http://forum.oszone.net/showthread.php?t=332447)

deluxe9999 11-01-2018 14:58 2790547

CMD Перемещение каталогов с длинными именами.
 
Здравствуйте всем!

Помогите пожалуйста с созданием 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%

Elven 11-01-2018 15:32 2790561

Код:

robocopy /?

deluxe9999 18-01-2018 15:42 2792304

Цитата:

Цитата Elven
Код:
robocopy /? »

Если не будет вам сложно, можно чуток по подробнее для новичка по CMD так как у robocopy много функций, затеряться можно?

megaloman 18-01-2018 16:18 2792310

,deluxe9999,
Цитата:

Цитата deluxe9999
Нужно чтобы один компьютер перемещал ежедневные генерированные папки с определенным именем с сервера на свою директорию. »

Зачем это нужно, для хранения или для текущей работы?
Цитата:

Цитата deluxe9999
сервер каждый день генерирует папку с файлами (Info_User data_2018-1-9-8-2-17_ImmdTask12-Compressed) »

Что обозначают цифры в имени папки?
Цитата:

Цитата deluxe9999
перемещал ежедневные генерированные папки с определенным именем с сервера на свою директорию. »

Что Вы имеете ввиду под определённым?
И, кстати,
Цитата:

Цитата deluxe9999
При копирование с XCOPY копируется все данные включая и старые папки сгенерированные в прошлые дни. »

У xcopy есть ключ /d, который позволяет пропустить копирование старых файлов, но при этом необходимо копировать файлы в одну и ту же папку, либо явно указывать дату
Цитата:

/D:m-d-y - Копирование файлов, измененных не ранее указанной даты. Если дата не указана, заменяются только конечные файлы, более старые, чем исходные.

deluxe9999 19-01-2018 15:28 2792531

Цитата:

Цитата megaloman
Зачем это нужно, для хранения или для текущей работы?
Цитата deluxe9999: »

Добрый день!
Нужны для хранения данных.

а) Цифры в папках это даты которое при ежедневном генерации данных сервер создает.
б) Под определённым имею ввиду то, что сервер создает папки с лишними информация ми, нужно после перемещения примерно называлась "papka_%data%"

megaloman 19-01-2018 15:57 2792543

Цитата:

Цитата deluxe9999
Нужны для хранения данных. »

Почему бы не использовать архиватор? Существенная экономия места даже при низком уровне сжатия.
Цитата:

Цитата deluxe9999
Цифры в папках это даты которое при ежедневном генерации данных сервер создает. »

Сегодня 19.01.2018. Как называется папка которую надо архивировать?

deluxe9999 19-01-2018 16:03 2792547

Цитата:

Цитата megaloman
Нужны для хранения данных. »
Почему бы не использовать архиватор? Существенная экономия места даже при низком уровне сжатия. »

Было бы круто с архивированием папку под именем %VLR_дата%.

deluxe9999 19-01-2018 16:12 2792553

папка под именем VLR

megaloman 19-01-2018 17:25 2792569

deluxe9999
Архиватор RAR
Код:

@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%\*.*"

Вы не расшифровали имя папки
Цитата:

Цитата deluxe9999
сервер каждый день генерирует папку с файлами (Info_User data_2018-1-9-8-2-17_ImmdTask12-Compressed) »

На мои непристойные домогательства Вы ответили
Цитата:

Цитата deluxe9999
папка под именем VLR »

Вам бы
Цитата:

Цитата deluxe9999
Хотелось бы чтобы перемещались папки а не копировались »

В моём скрипте применяю архиватор Rar. За удаление архивированных файлов отвечает выделенный ключ -df, если этого не нужно, удалите этот ключ.
Укажите свои пути к архивируемой папке, архивной папке и путь к архиватору, если он отличается от стандартного.
Скрипт архивирует в указанной папке все файлы за сегодня, заархивированные файлы удаляются (если Вы не передумаете).
Имя архива имеет вид VLR_ГГГГММДД
XCopy
Просто копирование за сегодня
Код:

@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 2793001

Спасибо большое за Ваш отклик. Так как суббота и воскресенье не рабочий день. Попробую сегодня и дам Вам свой результат.

deluxe9999 24-01-2018 13:44 2793494

Цитата:

Цитата megaloman
Копирование за сегодня с удалением исходных файлов
Код:
@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 2793526

Цитата:

Цитата deluxe9999
\\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 2793680

Цитата:

Цитата megaloman
Код:
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 2793698

Если путей будет 2 или 3 есть возможность в скрипте сгруппировать, а не по отдельности вписывать скрипт каждому пути?
И как по возможности запаковать каждый в отдельный архив?
Код:

@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 2794494

Цитата:

Цитата megaloman
Если путей будет 2 или 3 есть возможность в скрипте сгруппировать, а не по отдельности вписывать скрипт каждому пути?
И как по возможности запаковать каждый в отдельный архив? »


Спасибо огромное! Сработало.


Время: 08:25.

Время: 08:25.
© OSzone.net 2001-