Serg2010
27-05-2012, 21:21
Добрый вечер!
Помогите перевести скрипт на язык VBS.
Скрипт по заданному списку архивирует в целевую папку C:\ALL_BASES\Lenta\ базы ... Через семь дней (может меняться) архивы перезатирают сами себя ... Архивируемые папки (базы) заданы в виде списка (был вариант и с отдельным файлом), но с учетом бОльших возможностей языка VBS можно, наверное, оформить его в виде массива ... В скрипте ведется лог, где фильтруются положительные сообщения. В норме он ничего не содержит. Приветствуется некоторое улучшение (предложение) в скрипте.
cls
color 27
@echo off
set ArchDate=%Date:~6,4%%Date:~3,2%%Date:~0,2%
set Log=%~dp0%ArchDate%_LogBackup.txt
set ArchName=C:\ALL_BASES\Lenta\
set Filter=FINDSTR /V /B /I /C:Compressing /C:"7-Zip 4" /C:Scanning /C:"Creating archive" /C:"Everything is Ok" /R /C:$
set Num=0
For /F "Delims=" %%I In (%~dp0Numer.txt) Do Set Num=%%I
rem del %ArchName%*_%Num:~0,1%.7z
if %Num%==7 (set Num=1) else (set /a Num=Num+1)
echo %Num% >%~dp0Numer.txt
rem ---Список копируемых папок ----------------------------------------------------
rem Параметры: 1-что копируется, 2- добавка к имени архива , 3-флаг удаления после архивации, 4-если нужно исключаемые папки из архивирования
:,C:\Users\DOCUMENTS,DOCUMENTS,No,"-x!C:\Users\DOCUMENTS\Dir1 -x!C:\Users\DOCUMENTS\Dir2";
:,C:\1C_BUH\BUH,1C_Buh,No,,;
:,C:\1C_BUH\ZAR,1C_ZAR,No,,;
:,C:\Prog1\Dir1,Name1,No,,;
:,C:\Prog2\Dir2,Name2,No,,;
:,C:\Prog3\Dir3,Name3,No,,;
:,N:\Prog4\Dir4,Name4,No,,;
:,N:\Prog5\Dir5,Name5,No,,;
...
и т.д.
rem ---Цикл обработки списка копируемых папок для подстановки в процедуру---
pushd %~p0
FOR /F "delims=, eol=; tokens=1-5" %%i in (BackupBases.cmd) do if %%i==: Call :PROC %%j %%k %%l %%m
popd
GoTo End
rem ---Процедура копирования папок------------------------------------------
:PROC
cd /d %1
if exist %1\nul (
echo Идет копирование базы %1. Ждите ...
"C:\Program Files\7-zip\7z.exe" a -r %ArchName%%2_%Num% %1\* %~4 |%Filter% >>%Log%
cd ..
if "%3"=="Yes" rmdir %1 /s /q >>%Log%
)
Exit /b
:End
Помогите перевести скрипт на язык VBS.
Скрипт по заданному списку архивирует в целевую папку C:\ALL_BASES\Lenta\ базы ... Через семь дней (может меняться) архивы перезатирают сами себя ... Архивируемые папки (базы) заданы в виде списка (был вариант и с отдельным файлом), но с учетом бОльших возможностей языка VBS можно, наверное, оформить его в виде массива ... В скрипте ведется лог, где фильтруются положительные сообщения. В норме он ничего не содержит. Приветствуется некоторое улучшение (предложение) в скрипте.
cls
color 27
@echo off
set ArchDate=%Date:~6,4%%Date:~3,2%%Date:~0,2%
set Log=%~dp0%ArchDate%_LogBackup.txt
set ArchName=C:\ALL_BASES\Lenta\
set Filter=FINDSTR /V /B /I /C:Compressing /C:"7-Zip 4" /C:Scanning /C:"Creating archive" /C:"Everything is Ok" /R /C:$
set Num=0
For /F "Delims=" %%I In (%~dp0Numer.txt) Do Set Num=%%I
rem del %ArchName%*_%Num:~0,1%.7z
if %Num%==7 (set Num=1) else (set /a Num=Num+1)
echo %Num% >%~dp0Numer.txt
rem ---Список копируемых папок ----------------------------------------------------
rem Параметры: 1-что копируется, 2- добавка к имени архива , 3-флаг удаления после архивации, 4-если нужно исключаемые папки из архивирования
:,C:\Users\DOCUMENTS,DOCUMENTS,No,"-x!C:\Users\DOCUMENTS\Dir1 -x!C:\Users\DOCUMENTS\Dir2";
:,C:\1C_BUH\BUH,1C_Buh,No,,;
:,C:\1C_BUH\ZAR,1C_ZAR,No,,;
:,C:\Prog1\Dir1,Name1,No,,;
:,C:\Prog2\Dir2,Name2,No,,;
:,C:\Prog3\Dir3,Name3,No,,;
:,N:\Prog4\Dir4,Name4,No,,;
:,N:\Prog5\Dir5,Name5,No,,;
...
и т.д.
rem ---Цикл обработки списка копируемых папок для подстановки в процедуру---
pushd %~p0
FOR /F "delims=, eol=; tokens=1-5" %%i in (BackupBases.cmd) do if %%i==: Call :PROC %%j %%k %%l %%m
popd
GoTo End
rem ---Процедура копирования папок------------------------------------------
:PROC
cd /d %1
if exist %1\nul (
echo Идет копирование базы %1. Ждите ...
"C:\Program Files\7-zip\7z.exe" a -r %ArchName%%2_%Num% %1\* %~4 |%Filter% >>%Log%
cd ..
if "%3"=="Yes" rmdir %1 /s /q >>%Log%
)
Exit /b
:End