Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 3

Автор: Maza Faka
Дата сообщения: 01.06.2007 07:32
chelobey
Смотри в сторону wget. Wget - это консольный даунлоад менеджер,скачать, позволяет выводить STDOUT в лог, возвращает код ошибки "0", если закачка прошла успешно. Просто отслеживай код возврата и задавай условия, типа, если "0", то продолжаем дальше, если не "0", то преходим на метку...
Автор: GORA2
Дата сообщения: 01.06.2007 07:56
Подскажите, как вычислить число дней между двумя датами, если есть переменная %fstbilddat%=17.12.2006, например, и переменная %date% с таким же форматом. Нужно в переменную %autobuild% поместить вычисленное число дней.
Команду setlocal disabledelayedexpansion НЕ использовать, т.к. вызов этой подпрограммы будет производиться из цикла FOR и результат надо использовать в этом цикле!
Автор: Maza Faka
Дата сообщения: 01.06.2007 11:14
GORA2
Вот решение с помощью батника:

Код:
@echo off
set oldDate=17.12.2006

set curDate=%date%
set curDay=%curDate:~0,2%
set curMonth=%curDate:~3,2%
set curYear=%curDate:~-4%

set lastdays="31 28 31 30 31 30 31 31 30 31 30 31"

:count_
if %curDay% lss 10 set curDay=%curDay:~-1%
if %curMonth% lss 10 set curMonth=%curMonth:~-1%
set /a count+=1
set /a curDay-=1
if "%curDay%"=="0" set /a curMonth-=1
if "%curMonth%"=="0" set /a curMonth=12,curYear-=1
set /a leap=curYear%%4
if "%leap%"=="0" (set lastdays=%lastdays:28=29%) else (set lastdays=%lastdays:29=28%)
if "%curDay%"=="0" for /f "tokens=%curMonth%" %%a in (%lastdays%) do set curDay=%%a
if %curDay% lss 10 set curDay=0%curDay%
if %curMonth% lss 10 set curMonth=0%curMonth%
set myDate=%curDay%.%curMonth%.%curYear%
if %myDate%==%oldDate% (echo difference between %oldDate% and %date% = %count% days) else (goto count_)
Автор: GORA2
Дата сообщения: 01.06.2007 11:55
Maza Faka
Спасибо. Работает, но... уж очень медленно при большой разнице в датах
Мне бы что то вроде этого
Код: @echo off
:_Autonum
set fstbilddat=17.12.2006
setlocal disabledelayedexpansion
call ate2day "%date%"
set autobuild=%w%
call ate2day "%fstbilddat%"
setlocal enabledelayedexpansion
set /a autobuild=%autobuild%-%w%
echo difference between %fstbilddat% and %date% = %autobuild% days
pause
GOTO :EOF

ate2day
set dat=%~1
set /a y=%dat:~6,4%&set /a m=1%dat:~3,2%-100&set /a d=1%dat:~0,2%-100
set /a w=(%y%-1901)*365+(%y%-1901)/4+%d%-1+(!(%y% %% 4))*(!((%m%-3)^&16))
set /a w=(%w%+(%m%-1)*30+2*(!((%m%-7)^&16))-1+((65611044^>^>(2*%m%))^&3))
GOTO :EOF
Автор: Maza Faka
Дата сообщения: 01.06.2007 13:27
GORA2

Цитата:
Все меня здесь устраивает кроме этих setlocal

Так удали строки с "setlocal", они там вообще не нужны, у меня без них отлично считает дни.
Кстати, где взял этот код? И что подсчитывается здесь:

Код:
set dat=%~1
set /a y=%dat:~6,4%&set /a m=1%dat:~3,2%-100&set /a d=1%dat:~0,2%-100
set /a w=(%y%-1901)*365+(%y%-1901)/4+%d%-1+(!(%y% %% 4))*(!((%m%-3)^&16))
set /a w=(%w%+(%m%-1)*30+2*(!((%m%-7)^&16))-1+((65611044^>^>(2*%m%))^&3))
Автор: GORA2
Дата сообщения: 01.06.2007 13:47
Maza Faka
Цитата:
Так удали строки с "setlocal", они там вообще не нужны
Не скажите. Считать то оно считает, но вот правильно или нет - вопрос? У меня в батнике стоит setlocal enabledelayedexpansion, а это только подпрограмма и для ее нормальной работы нужно делать setlocal disabledelayedexpansion. Можете убедиться сами если поставите echo %y% %m% %d% %w% в конце подпрограммы date2day. Значения %w% при включенном и отключенном delayedexpansion будут различны
Цитата:
Кстати, где взял этот код?
Да здесь кто то недавно давал ссылку на hk_batch.zip, а это от туда.
Цитата:
И что подсчитывается здесь:
Это цитата из источника:
Цитата:
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: convert the date in %y% %m% %d% to the number of days (%w%) ::
:: since 1901 (day 0 is 1. Jan. 1901) ::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::





Автор: SerP and MoloT
Дата сообщения: 01.06.2007 14:05
Ребят, пытался чтото сделать.. но не получилось.. ибо не писал никогда и ничего, задача такая, нужно с одного сервака вин 2000 сп4 каждое утро в определённое время копировать часть файлов на другой сервак вин 2000 сп4 в определённую дирректорию... помогите лузеру.. плиз!
Автор: KapralBel
Дата сообщения: 01.06.2007 14:11
SerP and MoloT
По каким параметрам определяют ккие файлы надо копировать
* по списку
* по изменению
* др.
Автор: SerP and MoloT
Дата сообщения: 01.06.2007 14:24
KapralBel
ну... по названию.. т.е. на "сервере 1" в папке E:\прайсы\ есть файлики с одним и тем же названием содержимое которых меняется ежедневно, тупо их нужно скопировать на другой "сервер 2" \\ds\обновлённые прайсы\ каждое утро...и учесть чтоб на "сервере 2" копируемые прайсы с "сервера 1" автомотически заменяли старые прайсы ибо название у них так и должно быть одинаковым
Автор: KapralBel
Дата сообщения: 01.06.2007 14:33

Код: RoboCopy \\Server1\Price \\Server2\NewPrice Price1.doc price2.doc Price6.doc /mir
Автор: SerP and MoloT
Дата сообщения: 01.06.2007 15:07
чёто неполучается...
вот так вот написал, попытался хотя бы один изменённый файлик перенести... нифига...
RoboCopy C:\dstr\C.doc \\Mbp\Новая папка\C.doc /mir
Автор: Elroir
Дата сообщения: 01.06.2007 15:27
SerP and MoloT

Цитата:
чёто неполучается...

И не получится. Ты хотя бы справку по RoboCopy почитал. Не поддерживает он такой синтаксис, как ты ему дал.
Автор: KapralBel
Дата сообщения: 01.06.2007 15:29
SerP and MoloT

Код: RoboCopy C:\dstr\ \\Mbp\Новая папка\ C.doc /mir
Автор: Maza Faka
Дата сообщения: 01.06.2007 15:50
GORA2


Цитата:
У меня в батнике стоит setlocal enabledelayedexpansion

Посмотри справку "SET /?" для чего нужно применять "setlocal enabledelayedexpansion"


Цитата:
значения %w% при включенном и отключенном delayedexpansion будут различны

У меня они одинаковы и при включенном и при выключенном...


Цитата:
hk_batch.zip, а это от туда

В этом архиве есть файл "weekday_om-xp.bat", просмотри его, там такое же вычисление, но нет никакого упоминания про "setlocal enabledelayedexpansion".
Автор: 01MDM
Дата сообщения: 01.06.2007 17:44

Код:
set /a i=(%y%-1901)*365 + (%y%-1901)/4 + %d% + (!(%y% %% 4))*(!((%m%-3)^&16))
set /a i=(%i%+(%m%-1)*30+2*(!((%m%-7)^&16))-1+((65611044^>^>(2*%m%))^&3))%%7+1
Автор: Elroir
Дата сообщения: 01.06.2007 18:32
01MDM
Символ "&" используется в вычислениях внутри "set /a .. " в качестве побитового (bitwise) оператора "И" (AND). Знак "^" введен, чтобы CMD воспринимал "&" как арифметический оператор, а не как разделитель консольных команд.
Автор: GORA2
Дата сообщения: 01.06.2007 22:01
Maza Faka
Цитата:
Посмотри справку "SET /?" для чего нужно применять "setlocal enabledelayedexpansion"
Поверьте на слово, для чего я применяю "setlocal enabledelayedexpansion" я знаю. Можно бы было не применять - не стал бы этого делать.
Цитата:
У меня они одинаковы и при включенном и при выключенном...
По умолчанию "delayedexpansion" ОТКЛЮЧЕНЫ и добавление в батник "setlocal disabledelayedexpansion", если до этого не было "setlocal enabledelayedexpansion" конечно ничего не изменит! Я с большим уважением отношусь к Вам и не ставлю под сомнение ваши знания, но истина, как говорят, дороже...
Вот тест код:
Код: @echo off
setlocal enabledelayedexpansion
set fstbilddat=17.12.2006
set dat=%date%
call ate2day
echo.
set autobuild=%w%
set dat=%fstbilddat%
call ate2day
set /a autobuild=%autobuild%-%w%
echo %%autobuild%%=%autobuild%
pause>nul
goto :eof

ate2day
set /a y=%dat:~6,4%&set /a m=1%dat:~3,2%-100&set /a d=1%dat:~0,2%-100
set /a w=(%y%-1901)*365+(%y%-1901)/4+%d%-1+(!(%y% %% 4))*(!((%m%-3)^&16))
echo %d% %m% %y% %w%
set /a w=(%w%+(%m%-1)*30+2*(!((%m%-7)^&16))-1+((65611044^>^>(2*%m%))^&3))
echo %d% %m% %y% %w%
goto :eof
Автор: FAPSUK
Дата сообщения: 01.06.2007 23:29
Друзья, помогите пожалуйста!

Есть текстовыйфайл. Необходимо раздербанить его на части с именами
даты из текста (01.01.2007_XXXXX)

Это как-то реализуемо? Помогите, пожалуйста!


Текстовыйфайл вида :
__________________________________________________________________

Район: чччччччччччччччччччччччччччччччччччччччччччччччччччччччч

01.01.2007 чччччччччччччччччччччччччччччччччччччччччччччччччччччччч
чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч
чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч
чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч
чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч
чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч
__________________________________________________________________

Район: чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч

01.01.2007 ччччччччччччччччччччччччччччччччччччччччччччччччччччччччч
чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч
чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч
чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч
чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч
чччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччччч
__________________________________________________________________

премного благодарен !
Автор: Elroir
Дата сообщения: 02.06.2007 03:54
GORA2
Могу предложить такой вариант:

Код:
@echo off
setlocal enabledelayedexpansion
set fdate=17.12.2006
set sdate=02.06.2007
call :JDate 2007 06 02
set fdays=%JDate%
call :JDate 2006 12 17
set sdays=%JDate%
set /a dif=fdays-sdays
echo Difference is %dif%
goto :EOF

:JDate
:: Convert date to Julian
:: Arguments : YYYY MM DD
:: Returns : Julian date
::
:: First strip leading zeroes
SET MM=%2
SET DD=%3
IF %MM% lss 10 SET MM=%MM:~-1%
IF %DD% lss 10 SET DD=%DD:~-1%
::
:: Algorithm based on Fliegel-Van Flandern
:: algorithm from the Astronomical Almanac,
:: provided by Doctor Fenton on the Math Forum
:: (http://mathforum.org/library/drmath/view/51907.html),
:: and converted to batch code by Ron Bakowski.
SET /A Month1 = ( %MM% - 14 ) / 12
SET /A Year1 = %1 + 4800
SET /A JDate = 1461 * ( %Year1% + %Month1% ) / 4 + 367 * ( %MM% - 2 -12 * %Month1% ) / 12 - ( 3 * ( ( %Year1% + %Month1% + 100 ) / 100 ) ) / 4 + %DD% - 32075
FOR %%A IN (Month1 Year1) DO SET %%A=
GOTO:EOF
Автор: Maza Faka
Дата сообщения: 02.06.2007 08:18
FAPSUK
Попробуй так:

Код:
@echo off
chcp 1251>nul
set count=1
for /f "delims=" %%a in (list.txt) do (
echo %%a | find /i "район">nul && set /a count+=1
call :sort_ "%%a")
pause
goto :eof

:sort_
echo %~1>> %count%.txt
Автор: GORA2
Дата сообщения: 02.06.2007 11:38
Elroir
Спасибо. Подошло
Автор: Robby
Дата сообщения: 03.06.2007 12:14
Как с помощью батника распаковать во всех имеющихся подкаталогах RAR архивы? Распаковка должна производиться в тот же каталог, где находится исходный архив. После распаковки исходный архив должен удаляться. Желательна обработка ошибок распаковки с записью в log файл. При ошибке распаковки исходный архив не должен быть удален.
Автор: melyash
Дата сообщения: 03.06.2007 12:36
Помогите написать BAT файл, который будет выводить список из двух пунктов. При выборе 1-го запускаеться одна прога, а при выборе 2-го - другая
Автор: Elroir
Дата сообщения: 03.06.2007 12:41
melyash

Код:
@echo off
setlocal
echo 1 - Choice 1
echo 2 - Choice 2
set /p ch=Enter your choice -
if %ch:~0,1%==1 program1.exe
if %ch:~0,1%==2 program2.exe
Автор: melyash
Дата сообщения: 03.06.2007 12:46
Elroir
спасибо

Добавлено:
а можно ли как-нить выводить сообщения в кириллице?
Автор: Elroir
Дата сообщения: 03.06.2007 12:57
melyash
Можно

Код:
@echo off
chcp 1251>nul
setlocal
echo 1 - Выбор 1
echo 2 - Выбор 2
set /p ch=Ваш выбор -
if %ch:~0,1%==1 program1.exe
if %ch:~0,1%==2 program2.exe
Автор: melyash
Дата сообщения: 03.06.2007 13:01
Elroir

Цитата:
Можно

Кракозяблы получаються
Автор: mitrichbel
Дата сообщения: 03.06.2007 13:03
Сюда, наверно

Есть много текстовых файлов (в нескольких папках), имена у которых состоят из двух частей - текстовой и числовой, разделенных пробелами. В текстовой тоже могут быть и пробелы, и цифры, и любые другие символы, допускаемые файловой системой.
Мне нужно найти все файлы, у которых совпадает числовая часть их названий (то есть всё после последнего пробела в названии).

Например, имеем:
sd 15.txt
sd sd 15.txt
15 15.txt
sd 25.txt
Здесь результатом должны быть первые три файла - совпадающая числовая часть 15.

При этом местонахождение файлов в папках меняться не должно, насколько я понимаю.
Как можно поступить?

Спасибо заранее
Автор: Elroir
Дата сообщения: 03.06.2007 13:04
melyash

Цитата:
Кракозяблы получаються

Попробуй убрать строчку "chcp 1251>nul"
Автор: melyash
Дата сообщения: 03.06.2007 13:07
Elroir

Цитата:
Попробуй убрать строчку "chcp 1251>nul"

Все-равно ничего не понятно

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Автозагрузка терминальной сессии


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.