Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | | | |
Тады вот такой батничик для начала: [upd4] 04.10.05 20:33 Число просмотров: 13599
Автор: Den <Денис Т.> Статус: The Elderman Отредактировано 05.10.05 13:29 Количество правок: 9
|
Скриптец позволяет расчитать дату по дельте дней от указанной даты и возвращает результат формата YYYYMMDD в стандартный вывод.
Например, при стандарте РФ в представлении даты системы, для получения даты на 183 дня (примерно полгода) раньше текущей надо делать так (в bat файле):
for /F "tokens=* " %%i in ('calcdate.bat "dd DD.MM.YYYY" "%date%" -183') do set $date=%%i
set year=%$date:~0,4%
set month=%$date:~4,2%
set day=%$date:~-2%
rem Результат
echo YYYY=%year%; MM=%month%; DD=%day%
---
Все параметры для calcdate.bat, кроме дельты, обязательно указывать в двойных кавычках.
С перемещением каталогов додумаю потом (я на работе все-таки), а пока вот вам новая "игрушка":
@echo off
rem ---------- calcdate.bat ----------
rem --- Written by Den[bugtraq.ru] ---
rem ----------------------------------
rem Enter: %1 - Формат передающейся даты в двойных кавычках: DD, MM, YYYY в любой последовательности с любыми разделителями. Пример: "dd DD-MM-YYYY", dd используются для пропускания дней недели.
rem %2 - Дата в двойных кавычках указанного в %1 формата
rem %3 - Дельта со знаком. Примеры: -180, +3
rem Exit: В стандартном выходе расчетная дата формата YYYYMMDD
setlocal
set $date=%~2
call :getpos YYYY "%~1"
if defined $pos (call set year=%%$date:~%$pos%,4%%) else goto :EOF
call :getpos MM "%~1"
if defined $pos (call set month=%%$date:~%$pos%,2%%) else goto :EOF
call :getpos DD "%~1"
if defined $pos (call set day=%%$date:~%$pos%,2%%) else goto :EOF
rem Отбрасываем признак восьмеричного числа.
for /F "tokens=* delims=0" %%i in ("%day%") do set /a daycount=%%i
for /F "tokens=* delims=0" %%i in ("%year%") do set /a year=%%i
for /F "tokens=* delims=0" %%i in ("%month%") do set /a month=%%i
rem Кол-во високосных
set /a i=(%year%-1)/4
rem Текущий после високосного, если j==4, то идет високосный
set /a j=%year%-%i%*4
rem Кол-во дней в полных годах до текущего
set /a daycount+=%i%*1461+(%j%-1)*365
set /a i=%month%
:loop
set /a i-=1
if %i%==0 goto :next
if %i%==1 set /a daycount+=31
if %i%==2 (if %j%==4 (set /a daycount+=29) else set /a daycount+=28)
if %i%==3 set /a daycount+=31
if %i%==4 set /a daycount+=30
if %i%==5 set /a daycount+=31
if %i%==6 set /a daycount+=30
if %i%==7 set /a daycount+=31
if %i%==8 set /a daycount+=31
if %i%==9 set /a daycount+=30
if %i%==10 set /a daycount+=31
if %i%==11 set /a daycount+=30
if %i%==12 set /a daycount+=31
goto :loop
:next
rem Days after christmas: %daycount%
set /a daycount+=%3
rem Result=%daycount%
set /a i=%daycount%/1461
set /a j=%daycount%-%i%*1461
if %j%==0 set /a i-=1
set /a daycount-=%i%*1461
set /a year=%i%*4
set /a i=%daycount%/365
if %j%==0 set /a i-=1
set /a j=%daycount%-%i%*365
if %j%==0 set /a i-=1
set /a daycount-=i*365
set /a i+=1
set /a year+=%i%
set /a j=%daycount%
set /a month=1
:loop_1
if %month%==1 set /a j-=31
if %month%==2 (if %i%==4 (set /a j-=29) else set /a j-=28)
if %month%==3 set /a j-=31
if %month%==4 set /a j-=30
if %month%==5 set /a j-=31
if %month%==6 set /a j-=30
if %month%==7 set /a j-=31
if %month%==8 set /a j-=31
if %month%==9 set /a j-=30
if %month%==10 set /a j-=31
if %month%==11 set /a j-=30
if %month%==12 set /a j-=31
if %j% LEQ 0 goto :next_1
set /a month+=1
set /a daycount=%j%
goto :loop_1
:next_1
set lz=0000
call :getlen "%year%"
set /a $len=4-%$len%
if not %$len%==0 call set year=%%lz:~-%$len%%%%year%
call :getlen "%month%"
set /a $len=2-%$len%
if not %$len%==0 call set month=%%lz:~-%$len%%%%month%
set /a days=%daycount%
call :getlen "%days%"
set /a $len=2-%$len%
if not %$len%==0 call call set days=%%lz:~-%$len%%%%days%
echo %year%%month%%days%
endlocal
goto :EOF
:getlen
rem Enter: %1 - Строка в двойных кавычках
rem Exit: $len - Длина строки без учета двойных кавычек
set par=%~1
set /a i=0
set $len=
:getlen_loop
call :getlen_1 "%%par:~%i%,1%%"
if defined $len goto :EOF
set /a i+=1
goto :getlen_loop
:getlen_1
if %1=="" set /a $len=%i%
goto :EOF
:getpos
rem Enter: %1 - Искомая строка в двойных кавычках
rem %2 - Строка-источник в двойных кавычках
rem Exit: $pos - Позиция искомой строки в строке-источнике без учета двойных кавычек.
call :getlen "%~1"
set /a $findlen=%$len%
call :getlen "%~2"
set /a $formatlen=%$len%-1
set par=%~2
set /a i=0
set $pos=
:getpos_loop
call :getpos_1 %i% "%~1" "%%par:~%i%,%$findlen%%%"
if defined $pos goto :EOF
if %i%==%$formatlen% goto :EOF
set /a i+=1
goto :getpos_loop
:getpos_1
if %2==%3 set /a $pos=%i%
goto :EOF
rem ---------- END calcdate.bat ----------
---
|
<sysadmin>
|
О, великие гуру бат-файлов, а может быть даже vbs-скриптов! I need your help… 05.07.05 07:10 [Den]
Автор: HandleX <Александр М.> Статус: The Elderman
|
Постановка задачи простая... Как у теоремы Ферма ;-)
Нужно делать периодически резервные копии... При помощи популярного архиватора, к примеру RAR. И при помощи Планировщика Windows, конечно же... Конечная цель работы скрипта -- файл архива в формате ДД-ММ-ГГГГ.rar
Внимание, вопрос: как вставить дату в имя создаваемого файла при помощи бат-файла или скрипта?
Можно, конечно же, наваять консольную софтинку... Но всё-таки хотелось бы встроенными средствами Windows.
Заранее всем огромное спасибо за примеры.
|
|
ну если ты хочешь чисто шелловскими возможностями то тогда... 31.03.06 20:27
Автор: AL_M Статус: Незарегистрированный пользователь
|
ну если ты хочешь чисто шелловскими возможностями то тогда идея такая:
time > time_stamp < "ENTER"
edlin time_stamp < "2,10dENTERe"
for /f "delims=: tokens=2,3,4" %i in (time_stamp) do set time_stamp =%i_%j_%k
ну а затем вызываешь rar напр. передавая ему в качестве имени архива %time_stamp% (я просто опций рар-а не помню)
дерзай! проверено для вин2000
** в первых двух командах в "" взято содержимое предопределенных файлов которые нужно создать ручками причем маленькие буквы -- то что нужно вводить как есть БОЛЬШИЕ -- назв. спец символа (сам догадаешься какого)
> Постановка задачи простая... Как у теоремы Ферма ;-) > > Нужно делать периодически резервные копии... При помощи > популярного архиватора, к примеру RAR. И при помощи > Планировщика Windows, конечно же... Конечная цель работы > скрипта -- файл архива в формате ДД-ММ-ГГГГ.rar > > Внимание, вопрос: как вставить дату в имя создаваемого > файла при помощи бат-файла или скрипта? > Можно, конечно же, наваять консольную софтинку... Но > всё-таки хотелось бы встроенными средствами Windows. > Заранее всем огромное спасибо за примеры.
|
|
[NT+ (cmd.exe)] Делай раз, делай два... [upd3] 02.10.05 13:30
Автор: Den <Денис Т.> Статус: The Elderman Отредактировано 05.10.05 17:59 Количество правок: 13
|
> Постановка задачи простая... Как у теоремы Ферма ;-) > > Нужно делать периодически резервные копии... При помощи > популярного архиватора, к примеру RAR. И при помощи > Планировщика Windows, конечно же... Конечная цель работы > скрипта -- файл архива в формате ДД-ММ-ГГГГ.rar
Можно так:
rar a -agDD-MM-YYYY -- \_.rar ...
> Внимание, вопрос: как вставить дату в имя создаваемого > файла при помощи бат-файла или скрипта? > Можно, конечно же, наваять консольную софтинку... Но > всё-таки хотелось бы встроенными средствами Windows. > Заранее всем огромное спасибо за примеры.
Здесь так:
for /F "tokens=2,3,4 delims=- " %%i in ("%date%") do rar a %%k%%j%%i.rar ...
или
for /F "tokens=2,3,4 delims=- " %%i in ('date /t') do rar a %%k%%j%%i.rar ... ---
(Создается архив с датой в имени формата YYYYMMDD.rar
Такое именование позволяет легко сортировать архивы по именам в правильной последовательности дат.)
Обратите внимание, что данный пример приведен для представления даты в ОС формата "dd DD-MM-YYYY", где "dd" - день недели. Поэтому в delims, кроме "-" есть еще и " " (пробел).
Еще вариант:
rar a %date:~9,4%%date:~6,2%%date:~3,2%.rar ...
или
rar a %date:~-4%%date:~-7,2%%date:~-10,2%.rar ...
или
rar a %date:~-4,4%%date:~-7,-5%%date:~-10,-8%.rar ... ---
Что равносильно.
Также в формате YYYYMMDD - универсален для любых разделителей в представлении даты ОС.
А это маленький оффтоп:
(ответ Fly4life'у на http://bugtraq.ru/cgi-bin/forum.mcgi?type=sb&b=21&m=126845 (sorry, та ветка уже закрыта))
for /F "eol=; tokens=1,2 delims= " %%i in (rules.txt) do move /Y %%i %%j ---
Ко всему прочему, в файле rules.txt можно указывать несколько файлов, разделенных запятыми, для перемещения их в один каталог. Эта возможность поддерживается командой move.
На десерт: Frequently Asked Questions Regarding The Windows 2000 Command Processor
|
| |
О, великий гуру, усложним задачу, сведя ее а очень... 03.10.05 11:33
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 03.10.05 11:35 Количество правок: 1
|
> А это маленький оффтоп: > (ответ Fly4life'у на > http://bugtraq.ru/cgi-bin/forum.mcgi?type=sb&b=21&m > =126845 (sorry, та ветка уже закрыта)) > for /F "eol=; tokens=1,2 delims= " %%i in > (rules.txt) do move /Y %%i %%j
О, великий гуру, усложним задачу, сведя ее к очень актуальной в нашей жизни. Для разгребания помойки полезно передвигать целые каталоги, если внутри нет свежих (менее полугода) файлов с рабочего на другой носитель/том/накопитель с сохранением структуры каталогов и прав доступа.
|
| | |
Вот примеры VBScriptов для вашей задачи 06.10.05 09:34
Автор: svtvl Статус: Незарегистрированный пользователь
|
> Для разгребания помойки полезно > передвигать целые каталоги, если внутри нет свежих (менее > полугода) файлов с рабочего на другой > носитель/том/накопитель с сохранением структуры каталогов и > прав доступа.
Получение разницы дат (количество дней)
Wscript.Echo "Days Differ between today and 1 september 2005 " & DateDiff("d","1/9/2005", Date )
Получение даты файла
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile("c:\windows\system32\scrrun.dll")
Wscript.Echo "Date last accessed: " & objFile.DateLastAccessed
Wscript.Echo "Date last modified: " & objFile.DateLastModified
Копирование каталога полностью, но права доступа меняются на права каталога приёмника
список всех папок в папке
strComputer = "." ' имя компютера
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colFolders = objWMIService.ExecQuery( _
"Select * from Win32_Directory where Name = 'd:\\test'")
For Each objFolder in colFolders
errResults = objFolder.copy("c:\Archive")
' Wscript.Echo errResults, err.description
' Wscript.echo err.number
Next
получение списка файлов в папке
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("d:\22")
Set colFiles = objFolder.Files
For Each objFile in colFiles
Wscript.Echo objFile.Name, objFile.Size
Next
|
| | |
:) Только, пожалуйста, без приколов. Ok? Если хочешь, чтоб я помог, так и скажи. ;) 03.10.05 12:32
Автор: Den <Денис Т.> Статус: The Elderman
|
А если у тебя уже есть решение, то лучше не тратить время в пустую.
Задачка интересная. Можно попробовать.
|
| | | |
Ни каких приколов. Просто мне понравилась простота решения и... 03.10.05 16:26
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
|
> А если у тебя уже есть решение, то лучше не тратить время в > пустую. > Задачка интересная. Можно попробовать.
Ни каких приколов. Просто мне понравилась простота решения и обрадовало что встречаются еще правильно мыслящие люди.
Насчет помощи - глобально задача так пока не стоит, но очень полезно будет иметь ее решение. И я бы попользовался, и многим пригодилось бы.
|
| | | | |
Тады вот такой батничик для начала: [upd4] 04.10.05 20:33
Автор: Den <Денис Т.> Статус: The Elderman Отредактировано 05.10.05 13:29 Количество правок: 9
|
Скриптец позволяет расчитать дату по дельте дней от указанной даты и возвращает результат формата YYYYMMDD в стандартный вывод.
Например, при стандарте РФ в представлении даты системы, для получения даты на 183 дня (примерно полгода) раньше текущей надо делать так (в bat файле):
for /F "tokens=* " %%i in ('calcdate.bat "dd DD.MM.YYYY" "%date%" -183') do set $date=%%i
set year=%$date:~0,4%
set month=%$date:~4,2%
set day=%$date:~-2%
rem Результат
echo YYYY=%year%; MM=%month%; DD=%day%
---
Все параметры для calcdate.bat, кроме дельты, обязательно указывать в двойных кавычках.
С перемещением каталогов додумаю потом (я на работе все-таки), а пока вот вам новая "игрушка":
@echo off
rem ---------- calcdate.bat ----------
rem --- Written by Den[bugtraq.ru] ---
rem ----------------------------------
rem Enter: %1 - Формат передающейся даты в двойных кавычках: DD, MM, YYYY в любой последовательности с любыми разделителями. Пример: "dd DD-MM-YYYY", dd используются для пропускания дней недели.
rem %2 - Дата в двойных кавычках указанного в %1 формата
rem %3 - Дельта со знаком. Примеры: -180, +3
rem Exit: В стандартном выходе расчетная дата формата YYYYMMDD
setlocal
set $date=%~2
call :getpos YYYY "%~1"
if defined $pos (call set year=%%$date:~%$pos%,4%%) else goto :EOF
call :getpos MM "%~1"
if defined $pos (call set month=%%$date:~%$pos%,2%%) else goto :EOF
call :getpos DD "%~1"
if defined $pos (call set day=%%$date:~%$pos%,2%%) else goto :EOF
rem Отбрасываем признак восьмеричного числа.
for /F "tokens=* delims=0" %%i in ("%day%") do set /a daycount=%%i
for /F "tokens=* delims=0" %%i in ("%year%") do set /a year=%%i
for /F "tokens=* delims=0" %%i in ("%month%") do set /a month=%%i
rem Кол-во високосных
set /a i=(%year%-1)/4
rem Текущий после високосного, если j==4, то идет високосный
set /a j=%year%-%i%*4
rem Кол-во дней в полных годах до текущего
set /a daycount+=%i%*1461+(%j%-1)*365
set /a i=%month%
:loop
set /a i-=1
if %i%==0 goto :next
if %i%==1 set /a daycount+=31
if %i%==2 (if %j%==4 (set /a daycount+=29) else set /a daycount+=28)
if %i%==3 set /a daycount+=31
if %i%==4 set /a daycount+=30
if %i%==5 set /a daycount+=31
if %i%==6 set /a daycount+=30
if %i%==7 set /a daycount+=31
if %i%==8 set /a daycount+=31
if %i%==9 set /a daycount+=30
if %i%==10 set /a daycount+=31
if %i%==11 set /a daycount+=30
if %i%==12 set /a daycount+=31
goto :loop
:next
rem Days after christmas: %daycount%
set /a daycount+=%3
rem Result=%daycount%
set /a i=%daycount%/1461
set /a j=%daycount%-%i%*1461
if %j%==0 set /a i-=1
set /a daycount-=%i%*1461
set /a year=%i%*4
set /a i=%daycount%/365
if %j%==0 set /a i-=1
set /a j=%daycount%-%i%*365
if %j%==0 set /a i-=1
set /a daycount-=i*365
set /a i+=1
set /a year+=%i%
set /a j=%daycount%
set /a month=1
:loop_1
if %month%==1 set /a j-=31
if %month%==2 (if %i%==4 (set /a j-=29) else set /a j-=28)
if %month%==3 set /a j-=31
if %month%==4 set /a j-=30
if %month%==5 set /a j-=31
if %month%==6 set /a j-=30
if %month%==7 set /a j-=31
if %month%==8 set /a j-=31
if %month%==9 set /a j-=30
if %month%==10 set /a j-=31
if %month%==11 set /a j-=30
if %month%==12 set /a j-=31
if %j% LEQ 0 goto :next_1
set /a month+=1
set /a daycount=%j%
goto :loop_1
:next_1
set lz=0000
call :getlen "%year%"
set /a $len=4-%$len%
if not %$len%==0 call set year=%%lz:~-%$len%%%%year%
call :getlen "%month%"
set /a $len=2-%$len%
if not %$len%==0 call set month=%%lz:~-%$len%%%%month%
set /a days=%daycount%
call :getlen "%days%"
set /a $len=2-%$len%
if not %$len%==0 call call set days=%%lz:~-%$len%%%%days%
echo %year%%month%%days%
endlocal
goto :EOF
:getlen
rem Enter: %1 - Строка в двойных кавычках
rem Exit: $len - Длина строки без учета двойных кавычек
set par=%~1
set /a i=0
set $len=
:getlen_loop
call :getlen_1 "%%par:~%i%,1%%"
if defined $len goto :EOF
set /a i+=1
goto :getlen_loop
:getlen_1
if %1=="" set /a $len=%i%
goto :EOF
:getpos
rem Enter: %1 - Искомая строка в двойных кавычках
rem %2 - Строка-источник в двойных кавычках
rem Exit: $pos - Позиция искомой строки в строке-источнике без учета двойных кавычек.
call :getlen "%~1"
set /a $findlen=%$len%
call :getlen "%~2"
set /a $formatlen=%$len%-1
set par=%~2
set /a i=0
set $pos=
:getpos_loop
call :getpos_1 %i% "%~1" "%%par:~%i%,%$findlen%%%"
if defined $pos goto :EOF
if %i%==%$formatlen% goto :EOF
set /a i+=1
goto :getpos_loop
:getpos_1
if %2==%3 set /a $pos=%i%
goto :EOF
rem ---------- END calcdate.bat ----------
---
|
| | | | | |
Зря я это затеял... 05.10.05 11:44
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 05.10.05 11:45 Количество правок: 1
|
Можно то оно скорее всего можно, но не следует этого делать на командных интерпретаторах. Если уж работа с датами такая, то обходить каталоги, просматривая файлы на предмет даты их последнего изменения, вообще будет убийство.
|
| | | | | | |
Не надо так думать! ;) Есть решение! [upd3] 07.10.05 17:19
Автор: Den <Денис Т.> Статус: The Elderman Отредактировано 16.07.07 16:43 Количество правок: 5
|
Это у меня дата расчитывается по кол-ву дней, а ведь можно и упростить, сделать расчет по месяцам почти без изменения дня месяца. Получится немного быстрее, но просядет гибкость.
> Можно то оно скорее всего можно, но не следует этого делать > на командных интерпретаторах.
Почему же?
Все равно все это будет делаться ночью, запускаясь из шедулера. Не думаю, что у тебя уровень вложенности каталогов на столько велик, что скрипт не отработает за час.
Мы же не будем даты каталогов конвертить через calcdate.bat.
> Если уж работа с датами > такая, то обходить каталоги, просматривая файлы на предмет > даты их последнего изменения, вообще будет убийство.
Это, как раз менее серьезная и менее времязатратная проблема.
Решение задачи:
(выполняется очень быстро за счет оптимизации парсинга подкаталогов)
@echo off
rem ---------- deltabkp.cmd ----------
rem --- Written by Den[bugtraq.ru] ---
rem ----------------------------------
rem Enter: %1 - Source directory
rem %2 - Date delta
setlocal
if "%~2"=="" (
echo !Error! Date delta not defined.
goto :eof
)
set /a datedelta=%~2
if "%~1"=="" (
echo !Error! File directory not defined.
goto :eof
)
set srcdir=%~f1
if "%srcdir:~-1,1%"=="\" set srcdir=%srcdir:~0,-1%
rem --- Получаем разделитель и формат даты
:loopreg
set regfile=%random%.reg
if exist %regfile% goto :loopreg
regedit /e %regfile% "HKEY_CURRENT_USER\Control Panel\International"
if not exist %regfile% (
echo !Error! REG file not found.
goto :eof
)
for /F "skip=2 tokens=1,* delims== eol=[" %%i in ('type %regfile%') do if "sDate"=="%%~i" (
set datedelim=%%~j
) else if "sShortDate"=="%%~i" set dateform= %%~j
del /Q %regfile%
if not defined datedelim (
echo !Error! Date delimiter not defined.
goto :eof
) else if not defined dateform (
echo !Error! Date format not defined.
goto :eof
)
set dateform=%dateform:d=D%
set dateform=%dateform:m=M%
for /F "delims=yY tokens=1,*" %%k in ("%dateform%") do set dateform=%%kYYYY%%l
set dateform=%dateform:~1%
rem --- Получаем позиции DD,MM,YYYY
for /F "delims=%datedelim% tokens=1,2,3" %%i in ("%dateform%") do (
if "%%i"=="DD" (
if "%%j"=="MM" (set $dateorder=%%z%%y%%%x
) else (set $dateorder=%%y%%z%%%x
)) else if "%%i"=="MM" (
if "%%j"=="DD" (set $dateorder=%%z%%x%%%y
) else (set $dateorder=%%y%%x%%%z
)) else (
if "%%j"=="DD" (set $dateorder=%%x%%z%%%y
) else (set $dateorder=%%x%%y%%%z
))
)
rem --- Получаем дату по дельте от текущей
for /F %%i in ('calcdate.cmd "dd %dateform%" "%date%" %datedelta%') do set $date=%%i
:looptmpfile
set tmpfile=%temp%\dbp%random%.tmp
if exist %tmpfile% goto :looptmpfile
set lvl=0
set baklvl=0
set $dir=
rem "File Not Found" error message from "dir "%~1\*" /a-d/4" command to NUL
call :nextlvl "%srcdir%" 2>nul
if exist %tmpfile% del /Q %tmpfile%
endlocal
goto :eof
:do
rem ----- START BACKUP -----
rem Examples
rem call backup.cmd "%~1"
rem rar m -cfg- -ep2 -idp -m5 -os -ow -s -t -- old_%$date%.rar "%~1"
echo dir=%1
rem ------ END BACKUP ------
goto :eof
:nextlvl
set /a lvl+=1
set /a baklvl+=1
for /F %%d in ('dir /b /ad "%~1\*"') do (
call :nextlvl "%~1\%%d"
)
if %baklvl% LSS %lvl% (
rem --- New files in subdirectories
set /a updlvl=%lvl%-1
set /a lvl-=1
goto :eof
)
set updated=0
dir "%~1\*" /a-d/4 >nul
if errorlevel 0 (
for /F "skip=5 tokens=1 eol= " %%f in ('dir "%~1\*" /a-d/4') do (
for /F "tokens=1,2,3 delims=%datedelim%" %%x in ("%%f") do (
if not "%%y"=="" (
if %$dateorder% GTR %$date% set updated=-1
)))
)
if %updated%==-1 (
rem --- New files found in directory
if %baklvl% GTR %lvl% (
rem --- Old files in subdirectories, back it up!
for /F "tokens=*" %%f in (%tmpfile%) do call :do %%f
del /Q %tmpfile%
)
set /a lvl-=1
goto :eof
) else (
rem --- New Files not found in directory
set baklvl-=1
echo "%~1" >>%tmpfile%
)
:ret
set /a lvl-=1
goto :eof ---
|
| | | | | | | |
Дык че? Типа, я зря старался? 14.10.05 18:47
Автор: Den <Денис Т.> Статус: The Elderman
|
|
| | | | | | | | |
Как это зря... Очень нужно. Сейчас загружен, есть только полчаса в день чтоб к компу подойти. Дай еще пару дней. 18.10.05 15:11
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
|
|
| | | | | | | | | |
Таки ты попробовал? 22.03.06 13:37
Автор: Den <Денис Т.> Статус: The Elderman
|
|
| | | | | | | | | | |
Ну да, забыл сразу отписать. Глючит. Пару каталогов с... 22.03.06 16:38
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
|
Ну да, забыл сразу отписать. Глючит. Пару каталогов с файлами порядка 2002-2004 года один выдает, другой нет. С чем связано, пока не разобрался. Склепаю dir и то что она выдает и кину.
|
| | | | | | | | | | | |
А может и не должен? [upd] 28.03.06 17:03
Автор: Den <Денис Т.> Статус: The Elderman Отредактировано 17.09.13 20:09 Количество правок: 2
|
Алгоритм работы следующий:
1. Если в каталоге со "старыми" файлами существует подкаталог с "новыми" файлами, то ничего не бэкапится.
2. Если в каталоге с "новыми" файлами существуют подкаталоги со "старыми" файлами, то бэкапятся подкаталоги.
3. Если в каталоге и подкаталогах только "старые" файлы, то бэкапится верхний каталог вместе с подкаталогами.
[upd]
Действительно глючило. Нашел одну серьезную ошибку. Поправил.
Добавил доп.функционал, теперь скрипт сам определяет формат даты системы.
|
| | | | | | | | | | | | |
Где новая версия? 19.09.13 00:33
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
|
|
| | | | | | | | | | | | | |
думаю, не актуально 21.09.13 05:50
Автор: Den <Денис Т.> Статус: The Elderman
|
|
|
Этим занимается One-click BackUp for WinRAR... 31.08.05 09:22
Автор: Игорь Статус: Незарегистрированный пользователь
|
> Постановка задачи простая... Как у теоремы Ферма ;-) > > Нужно делать периодически резервные копии... При помощи > популярного архиватора, к примеру RAR. И при помощи > Планировщика Windows, конечно же... Конечная цель работы > скрипта -- файл архива в формате ДД-ММ-ГГГГ.rar
Этим занимается One-click BackUp for WinRAR (http://acritum.com). Есть встроенный планировщик и поддержка коммандной строки для внешнего планировщика. Программа шарварная, но в xUSSR продают за любую цену, начиная от 150 рублей :) Я купил себе через Webmoney за 200 рублей - совсем не жалею, программа реально очень удобная и стоит того, чтобы за нее заплатить. Есть русский интерфейс. Была еще совсем бесплатная версия 1.x без многих функций, добавленных в версии 2.x (очень примитивный планировщик, нет поддержки CDRW, FTP, SMTP, LAN, нет удаленного контроля через интернет и LAN, но на жесткий диск бэкапит без проблем).
|
|
Nncron и без рара бы справился 22.07.05 10:59
Автор: Annihitor Статус: Незарегистрированный пользователь
|
> Можно, конечно же, наваять консольную софтинку... Но > всё-таки хотелось бы встроенными средствами Windows. > Заранее всем огромное спасибо за примеры.
Ненадо ничего ваять. Если бы рар не умел делать такие файлы то есть NNCRON
http://www.nncron.ru/
позволяет назначать любые задания и алгоритмы для управления ПК, дефргагментацию, архивацию, синхронизацию времени, выключение, обновление, получение почты, отработка горячих клавих, окошек и т.п. практически полностью может заменить своими макросами простые действия пользователя.
Программа просто незаменима, в некоторых случаях.
|
|
|