Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка Windows 2000/XP/2003 » [решено] Как сделать,что б батник проверял число ?

Ответить
Настройки темы
[решено] Как сделать,что б батник проверял число ?

Старожил


Сообщения: 440
Благодарности: 12

Профиль | Отправить PM | Цитировать


Нужно что б батник проверял больше сейчас определенной даты или нет.
Тут я вижу несколько проблем :
1 незнаю как вообше дату проверить
2 не знаю как определить больше сейчас орпределенной даты или нет.
Ведь число может быть и меньше,а месяц следующий,или даже год

Отправлено: 12:52, 12-09-2006

 

Аватара для ShaddyR

Железных Дел Мастер


Moderator


Сообщения: 24528
Благодарности: 4498

Профиль | Сайт | Отправить PM | Цитировать


nj_: озвучу, раз аналогия не понята
Код: Выделить весь код
set file=%SYSTEMROOT%\setupact.log
If Exist %file% For %%i In (%file%) Do SET TIMESTAMP=%%~ti
echo %timestamp%

-------
[FAQ] Как определить аппаратную конфигурацию компьютера и правильно задать вопрос
-------
В благодарность за помощь нажимаем ссылочку "Полезное сообщение" внизу этого самого сообщения (подробнее). Помните: админ конфеты НЕ ПЬЁТ ;)
-------
Говори, что думаешь и думай, что говоришь! (c) || МОЙ ShaddyR.at.UA/blog - Как поменять термопасту за 100+ баксов

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:23, 13-09-2006 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

nj_ nj_ вне форума

Аватара для nj_

Новый участник


Сообщения: 17
Благодарности: 1

Профиль | Отправить PM | Цитировать


Провтикал аналогию
Спасибо!

Ешо один глупий вопрос:
как присвоит переменной значение дати на n дней (месяцев) больше (меньше) текущей?

-------
Звините за орфографию, Руский плохо знаю и не все букви есть :-(


Отправлено: 22:58, 15-09-2006 | #12


Аватара для ShaddyR

Железных Дел Мастер


Moderator


Сообщения: 24528
Благодарности: 4498

Профиль | Сайт | Отправить PM | Цитировать


nj_
Цитата:
как присвоит переменной значение дати на n дней (месяцев) больше (меньше) текущей?
я честно попытался решить этот вопрос... с учетом отсутствия в коммандном процессоре мат. операций. Все, что я нашел - это вот эта лабораторная работа, в которой среди прочего делается
Цитата:
Написание командного скрипта для вывода ряда фибоначи (т.е. где каждый последующий член ряда равен сумме двух предыдущих: 1, 1, 2, 3, 5, 8, 13, ...). Для этого будет использовано несколько пакетных файлов, работа с переменными окружения и тд.
Пару раз его перечитал и понял, шо я ничего не понял. Попробуй, мож у тебя лучше получится

-------
[FAQ] Как определить аппаратную конфигурацию компьютера и правильно задать вопрос
-------
В благодарность за помощь нажимаем ссылочку "Полезное сообщение" внизу этого самого сообщения (подробнее). Помните: админ конфеты НЕ ПЬЁТ ;)
-------
Говори, что думаешь и думай, что говоришь! (c) || МОЙ ShaddyR.at.UA/blog - Как поменять термопасту за 100+ баксов

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:06, 18-10-2006 | #13


Пользователь


Сообщения: 50
Благодарности: 3

Профиль | Отправить PM | Цитировать


Эммммм ребят, сори за офтоп, кто нибудь может поделиться своими источниками (будь то название книги, сылка на электронное издание, какие то статьи в инете и пр.) по написанию bat файлов. А то через поисковик ничего дельного не нашёл. Заранее спасибо за ответ

Отправлено: 15:39, 18-10-2006 | #14


Аватара для Sanja Alone

Ищу Человека…


Сообщения: 420
Благодарности: 67

Профиль | Сайт | Отправить PM | Цитировать


DarkTiger
Цитата:
поделиться своими источниками
Когда-то давно учился этому делу по книге Питера Нортона "MS-DOS" (точного названия не помню; помню, что в мягкой зеленой обложке была). Недавно обновил знания просто почитав C:\WINDOWS\Help\ntcmds.chm

-------
Sanja Alone's site (ConvRegToAU3, OEsr, RSA, AutoIt скрипты)

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:14, 18-10-2006 | #15


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


ShaddyR
Цитата:
с учетом отсутствия в коммандном процессоре мат. операций.
ты не прав - все календарные расчеты основаны на целочисленной арифметике, так что возможностей командного процессора за глаза хватает, хотя алгоритмы действительно нельзя назвать простыми - в языках высокого уровня они скрыты за функциями преобразования времени. Как-то хотел сделать расчет одной похожей задачки на CMD, но время поджимало и пришлось делать на VBS... если соберусь, то попробую переделать...

DarkTiger
из "избранного":
http://www.windowsfaq.ru/content/category/3/7/45
http://www.windowsfaq.ru/content/category/3/19/57/
http://www.microsoft.com/technet/pro.../FAQW2KCP.mspx
http://www.robvanderwoude.com/index.html
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:16, 19-10-2006 | #16


Пользователь


Сообщения: 50
Благодарности: 3

Профиль | Отправить PM | Цитировать


amel27 Огромное спасибо, уже читаю, написано на доступном языке, кроме последних 2 сылок, потому как англиский знаю плохо
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:30, 19-10-2006 | #17


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата:
как присвоит переменной значение дати на n дней (месяцев) больше (меньше) текущей?
Самый простой способ (и самый медленный) - итеративный цикл по количеству дней... Как и предупреждал, несколькими строчками кода не обошлось. Для ускорения расчетов можно было применить цикл по месяцам с выравниванием даты на последнем шаге, но тогда код стал бы еще более громоздким и плохо читаемым.
Код: Выделить весь код
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
Rem Параметры расчета: кол-во дней (>0!) и направление (+/-)
SET DAYS=730
SET SIGN=+
Rem Установка окружения и цикл расчета
CALL :GetDate
CALL :GetMnthDays
:Start
CALL :NextDay "%SIGN%1"
SET /A DAYS=%DAYS%-1
IF %DAYS% NEQ 0 GOTO :Start
Rem Вывод результата и завершение работы
CALL :ShowDate
EXIT
Rem Перемещение на следующий/предыдущий календарный день
:NextDay
SET /A Day=%Day%%~1
IF %Day% GTR !DOFW! (
	CALL :NextMonth +1
	CALL :GetMnthDays
	SET /A Day=1
)
IF %Day% EQU 0 (
	CALL :NextMonth -1
	CALL :GetMnthDays
	SET /A Day=!DOFW!
)
GOTO :EOF
Rem Расчет года и месяца, отстоящих от заданного
:NextMonth
SET /A MNDF=%Year%*12+%Month%%1
SET /A Year=(%MNDF%-1)/12
SET /A Month=%MNDF%-%Year%*12
GOTO :EOF
Rem Число дней в заданном месяце
:GetMnthDays
IF %Month% EQU 2 (
	CALL :IsYearVisok
	SET /A DOFW = 28+!VISOK!
) ELSE (
	SET NUM=0
	FOR %%i IN (31 28 31 30 31 30 31 31 30 31 30 31) DO (
		SET /A NUM=!NUM!+1
		IF %Month% EQU !NUM! (
			SET DOFW=%%i
			GOTO :EOF
		)
	)
)
GOTO :EOF
Rem Проверка года на високосность
:IsYearVisok
SET /A M1=%Year%-(%Year%/4)*4
SET /A M2=%Year%-(%Year%/100)*100
SET /A M3=%Year%-(%Year%/400)*400

SET VISOK=0
IF 0 EQU %M1% IF 0 NEQ %M2% SET VISOK=1
IF 0 EQU %M3% SET VISOK=1
GOTO :EOF
Rem Чтение текущей даты в переменные окружения
:GetDate
FOR /F "tokens=1,3" %%i IN ('REG QUERY "HKCU\Control Panel\International" /s^|findstr /C:"iDate" /C:"sDate"') DO SET %%i=%%j
FOR /F "TOKENS=1-4* DELIMS=%sDate% " %%A IN ('DATE/T') DO (
	IF %iDate%==0 (
		SET Year=%%C
		SET Month=%%A
		SET Day=%%B
	)
	IF %iDate%==1 (
		SET Year=%%C
		SET Month=%%B
		SET Day=%%A
	)
	IF %iDate%==2 (
		SET Year=%%A
		SET Month=%%B
		SET Day=%%C
	)
)
GOTO :EOF
Rem Отображение итоговой даты
:ShowDate
SET Month=0%Month%
SET Month=%Month:~-2%
SET Day=0%Day%
SET Day=%Day:~-2%
IF %iDate%==0 ECHO %Month%%sDate%%Day%%sDate%%Year%
IF %iDate%==1 ECHO %Day%%sDate%%Month%%sDate%%Year%
IF %iDate%==2 ECHO %Year%%sDate%%Month%%sDate%%Day%
GOTO :EOF

Последний раз редактировалось amel27, 20-10-2006 в 10:33. Причина: кометические мелочи

Это сообщение посчитали полезным следующие участники:

Отправлено: 05:51, 20-10-2006 | #18


Аватара для ShaddyR

Железных Дел Мастер


Moderator


Сообщения: 24528
Благодарности: 4498

Профиль | Сайт | Отправить PM | Цитировать


amel27: силён!

Отправлено: 10:10, 20-10-2006 | #19


Аватара для Sanja Alone

Ищу Человека…


Сообщения: 420
Благодарности: 67

Профиль | Сайт | Отправить PM | Цитировать


Немного дополнил ф-цию получения текущей даты из поста 18. Дополнение связано с различием в отображении даты в зависимости от sLongDate и sShortDate. Я обошелся без необходимости проверки этих параметров в реестре, а поступил проще (правда, понадобилась лишняя переменная).
Код: Выделить весь код
Rem Чтение текущей даты в переменные окружения
:GetDate
for /f "tokens=1,3" %%j in ('reg query "HKCU\Control Panel\International" /s^|findstr /C:"iDate" /C:"sDate"') do set %%j=%%k
for /f %%j in ('echo %date%^|find " " /C') do (
	if %%j == 1 (
		for /f "tokens=2 delims= " %%j in ('echo %date%') do set mdate=%%j
	) else (
		set mdate=%date%
	)
)
for /f "tokens=1,2,3 delims=%sDate%" %%j in ('echo %mdate%') do (
	if %iDate%==0 (
		set Month=%%j
		set Day=%%k
		set Year=%%l
	)
	if %iDate%==1 (
		set Day=%%j
		set Month=%%k
		set Year=%%l
	)
	if %iDate%==2 (
		set Year=%%j
		set Month=%%k
		set Day=%%l
	)
)
goto :EOF
Да, совсем забыл. Вот ф-ция для установки даты:
Код: Выделить весь код
Rem Установка даты
:SetDate
if %iDate%==0 (
	date %Month%%sDate%%Day%%sDate%%Year%
) else (
	if %iDate%==1 (
		date %Day%%sDate%%Month%%sDate%%Year%
	) else (
		if %iDate%==2 (
			date %Year%%sDate%%Month%%sDate%%Day%
		)
	)
)
goto :EOF
Ситуация, в к-рой могут пригодиться приведенные выше ф-ции:
Код: Выделить весь код
Rem Определение текущей даты
call :GetDate
Rem прибавление 1 года к дате
set /a Year+=1
Rem Установка даты
call :SetDate

Rem Выполнение определенных манипуляций

Rem Возврат реальной даты (отнимаем 1 год)
set /a Year-=1
Rem Установка даты
call :SetDate

-------
Sanja Alone's site (ConvRegToAU3, OEsr, RSA, AutoIt скрипты)


Последний раз редактировалось Sanja Alone, 13-07-2007 в 13:28.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:50, 11-07-2007 | #20



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка Windows 2000/XP/2003 » [решено] Как сделать,что б батник проверял число ?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] как сделать чтоб программа думала что системное время не то что на часах? mitiya Скриптовые языки администрирования Windows 2 13-01-2010 17:29
CMD/BAT - [решено] Как создать бат, чтобы проверял число месяца? Ingolder Скриптовые языки администрирования Windows 7 07-12-2009 21:28
CMD/BAT - [решено] Подскажите, как сделать что бы CMD записывал файл на флеху? ofcoss Скриптовые языки администрирования Windows 2 16-07-2009 11:20
Интернет - [решено] Как сделать так что бы подключение по VPN было автоматическое. Butunin Klim Microsoft Windows 2000/XP 19 16-12-2008 20:15
[решено] Как сделать что б иконка WM11 отображалась в трее? Bester Программное обеспечение Windows 2 06-02-2008 22:22




 
Переход