![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] 40000 дней назад |
|
CMD/BAT - [решено] 40000 дней назад
|
Новый участник Сообщения: 4 |
Доброго времени суток форумчане!
Обращаюсь к Вам в надежде [надежда умирает последней ![]() 1. Создать каталог с названием dir<дата>, где <дата> - дата, которая была 40000дней тому назад; 2. В каталог dir<дата> скопировать все файлы компьютера созданные с 12 дот 13 часов, и с 14 до 16 часов; 3. Количество файлов и их названия записать в файл report.log. Заранее спасибо! |
|
Отправлено: 15:44, 03-04-2010 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать насколько принципиально использование CMD ?.. просто на VBS будет на порядок проще
п.2 и 3 проблемы не составляют, но в п.1 без ф-ций даты весь календарь придется самому считать, как вариант алгоритма: идти от текущей даты "назад" - сначала годами (корректируя поправки на високосные года), а на последнем шаге днями (пример) |
Отправлено: 13:29, 05-04-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать amel27, imho VBS препод не оценит ;-)
и почему многие так любят VBs - ведь это тупиковая технология; почему не Js, навыки работы с которым много где могут пригодится. |
Отправлено: 15:18, 06-04-2010 | #3 |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать Для определения дыта которая было 40000 дней назад используй это: http://www.robvanderwoude.com/files/dateadd_nt.txt
Пример использования: D:\7496~1\SM-prog\424A~1\BAT'~1>3 -40000 Starting date : 17.04.2010 Days subtracted : 40000 Resulting date : 11.10.1900 |
Отправлено: 17:33, 17-04-2010 | #4 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Всем спасибо за попытку решения проблемы. SMprog - Вам отдельное спасибо. Программу написал, ниже привожу ее код (ars.bat -название bat-файла, определяющего дату -40000; файлы рассматриваю только в каталоге C:\1):
@ECHO OFF CALL ARS.BAT %DATE% -40000 FOR /F "SKIP=3 TOKENS=4,5* DELIMS=. " %%A IN (ARS.TXT) DO ( SET DD=%%A SET MM=%%B SET YYYY=%%C ) SET YY=%YYYY:~2,2% SET DIRNAME=DIR%DD%%MM%%YY% SET DAT=%DD%%MM%%YY% SET /A IDX = 1 MKDIR %DIRNAME% DIR C:\1 /A:-D /B >> FIL.TXT FOR /F %%X IN (FIL.TXT) DO ( CALL :PR1 %%X ) GOTO:EOF :PR1 SET A=%1 FOR /F "TOKENS=2,4 DELIMS=: " %%Y IN ('DIR C:\1\%A% /-C ^| FINDSTR /R /B /C:"[0-9]*\.[0-9]*\.[0-9]*"') DO ( CALL :PR2 %A% %%Y) GOTO:EOF :PR2 SET T=%2 IF "%T%" GEQ "12" ( IF "%T%" LEQ "13" ( CALL COPY C:\1\%A% %DIRNAME% SET ARC_FILE=%DAT%%A% REN %DIRNAME%\%A% %ARC_FILE% RAR A -DF -SL1258291 ARC.ZIP %DIRNAME%\%ARC_FILE% RAR VB ARC.ZIP > REPORT.LOG ECHO %IDX% >> REPORT.LOG SET /A IDX+=1 ) ) IF "%T%" GEQ "14" ( IF "%T%" LEQ "16" ( CALL COPY C:\1\%A% %DIRNAME% SET ARC_FILE=%DAT%%A% REN %DIRNAME%\%A% %ARC_FILE% RAR A -DF -SL1258291 ARC.ZIP %DIRNAME%\%ARC_FILE% RAR VB ARC.ZIP>REPORT.LOG ECHO %IDX% >> REPORT.LOG SET /A IDX+=1 ) ) GOTO:EOF |
|
Последний раз редактировалось marat-link, 26-04-2010 в 10:38. Причина: Добавил архив с bat-файлами Отправлено: 10:34, 26-04-2010 | #5 |
Пользователь Сообщения: 72
|
Профиль | Сайт | Отправить PM | Цитировать Busla,
Цитата:
Отвечу на вопрос, все же. Они (многие) так любят VBS и BAT, потому что эти технологии очень просты в изучении, а текст кода прозрачен и легкочитаем! |
|
------- Отправлено: 14:21, 26-04-2010 | #6 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Вот еще несколько прямолинейный вариант решения.
Echo off rem CLS rem ------------------- rem Предполагаю, что Дата в системе выдаётся в формате дд.мм.гггг чч:мм и т д (разделитель не важен) rem ------------------- Set NDays=40000 Set GdeNewDir=C:\Сказка про белого бычка\ Set Otkuda=D:\Update\ Set KudaLog=C:\Сказка про белого бычка\LogFile.txt Set TimeTop1=12 Set TimeBot1=13 Set TimeTop2=14 Set TimeBot2=16 rem Выделяю из текущей даты день, месяц, год Set Dt=%Date% Set Day=%Dt:~0,2% If %Day:~0,1%==0 Set Day=%Day:~1,1% Set Mon=%Dt:~3,2% If %Mon:~0,1%==0 Set Mon=%Mon:~1,1% Set Yea=%Dt:~6,4% rem Вычитаю из тек даты указ кол-во дней Call :MinusDays rem Создаю выходную директорию с пересчитанной датой в названии Set OutDir=%GdeNewDir%Dir%Yea%%Mon%%Day% MD "%OutDir%" rem Копирую файлы изменённые в указанных временных промежутках Echo ----------------- %Date% %Time% --------------- >>"%KudaLog%" Set AllCopyFiles=0 for /R "%Otkuda%" %%i in (*.*) do Call :copy2time "%%~fi" "%%~ti" Echo ----------------- Всего скопировано файлов %AllCopyFiles% -------------->>"%KudaLog%" GoTo End rem ------------------------------------------------------------- rem Процедура отнимает от даты заданное число дней rem Дата содержится в трёх переменных Day Mon Yea rem ------------------------------------------------------------- :MinusDays Call :DelYear4 For /L %%D IN (1,1,%NDays%) Do Call :OldDt If %Day% LSS 10 Set Day=0%Day% If %Mon% LSS 10 Set Mon=0%Mon% rem Echo %Yea% %Mon% %Day% rem Pause GoTo End rem ------------------------------------------------------------- rem Процедура отнимает от даты периоды в 4 года в отнимаемых днях rem ------------------------------------------------------------- :DelYear4 REM 1461 - кол-во дней в 4 годах (с високосным) If %NDays% LSS 1461 GoTo End Set /A iYea=%NDays%/1461 Set /A Yea=%Yea%-%iYea%*4 Set /A NDays=%NDays%-%iYea%*1461 GoTo End rem ------------------------------------------------------------- rem --------------------------------- rem Процедура отнимает от даты 1 день rem --------------------------------- :OldDt Set /A Day=%Day%-1 If %Day% GTR 0 GoTo End Set Day=31 Set /A Mon=%Mon%-1 If %Mon% GTR 0 GoTo BotDay Set Mon=12 Set /A Yea=%Yea%-1 :BotDay If Not %Mon%==2 GoTo Mon30 Set Day=28 Set iYea=%Yea% Set /A iYea=%iYea%/4 Set /A iYea=%iYea%*4 If %Yea%==%iYea% Set Day=29 GoTo End :Mon30 If %Mon%==4 Set Day=30 If %Mon%==6 Set Day=30 If %Mon%==9 Set Day=30 If %Mon%==11 Set Day=30 GoTo End rem --------------------------------- rem --------------------------------- rem Процедура копирует файлы изменённые в 2 заданных промежутках времени rem --------------------------------- :copy2time Set TimeFile=%2 Set TimeFile=%TimeFile:~12,2% If %TimeFile:~0,1%==0 Set TimeFile=%TimeFile:~1,1% :Time1 If %TimeFile% LSS %TimeTop1% GoTo End If %TimeFile% GEQ %TimeBot1% GoTo Time2 GoTo CopyFile :Time2 If %TimeFile% LSS %TimeTop2% GoTo End If %TimeFile% GEQ %TimeBot2% GoTo End GoTo CopyFile :CopyFile Copy %1 "%OutDir%\" >Nul Echo %1 %2 >>"%KudaLog%" Set /A AllCopyFiles=%AllCopyFiles%+1 GoTo End rem --------------------------------- :End |
Последний раз редактировалось megaloman, 29-04-2010 в 20:07. Причина: Исправление ошибок после замечаний Amel27 Отправлено: 20:17, 28-04-2010 | #7 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Цитата megaloman:
|
||
Отправлено: 08:39, 29-04-2010 | #8 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Amel27
Цитата:
Самое плохое, что эта ошибка проявлялась бы далеко не каждый раз только для 08 и 09 в исходной дате. Исправил указанные Вами ошибки. Не знаю, как это корректно с точки зрения поведения на форуме, но исправленный вариант записал вместо старого. Спасибо большое. |
|
------- Отправлено: 19:57, 29-04-2010 | #9 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать megaloman, мои совсем старые батники на этом форуме остались с этой ошибкой
|
Отправлено: 03:31, 30-04-2010 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Warhammer 40000: Dawn Of War 2 | artem7890 | Игры | 2 | 15-12-2009 22:37 | |
компьютер для игр до 40000 рублей | OBLIVION555 | Выбор отдельных компонентов компьютера и конфигурации в целом | 2 | 28-07-2009 06:13 | |
Назад в будущее! Или EcomStation 1.2.5 | ecom | Новости и флейм из мира *nix | 13 | 05-09-2007 22:12 | |
как все вернуть назад.... | ANDRY | Microsoft Windows 95/98/Me (архив) | 4 | 11-08-2002 17:14 |
|