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

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

Автор: Taran2ul
Дата сообщения: 25.09.2010 19:55
Подскажите решение регистрирования расширения файла для программы чтобы в реестр вносились данные о пути установки этой программы (а точнее распаковки). Т.е. есть самораспаковывающийся архив с программой, и нужно чтобы файлы некоторого расширения открывались в ней.
Вот reg который я сделал:

Код: REGEDIT4

[HKEY_CLASSES_ROOT\.123]
@="123-File"

[HKEY_CLASSES_ROOT\123-File]
@="123 Просмотрщик"

[HKEY_CLASSES_ROOT\123-File\shell]

[HKEY_CLASSES_ROOT\123-File\shell\Open]

[HKEY_CLASSES_ROOT\123-File\shell\Open\command]
@="С:\\123\\123.exe \"%1\""

[HKEY_CLASSES_ROOT\123-File\DefaultIcon]
@="С:\\123\\123.exe,1"
Автор: Mark_Titov
Дата сообщения: 25.09.2010 20:15

Цитата:
адрес в переменную прописывается?

Free_Soft
Да, он видит адрес...
Даже если в эту строку его прописать, толку нет...
Автор: LomikXP
Дата сообщения: 25.09.2010 20:38
Есть вопрос в bat-файлах можно задействовать "двойную" рекурсию?

P.S. Я думаю что нет :-]
Автор: NIKZZZZ
Дата сообщения: 25.09.2010 20:39
Taran2ul

Цитата:
Но тут встает вопрос - А если путь не тот?


Конвертировать REG в BAT


Код:
Set ExeFile=%~dpnx0
Reg.exe add "HKCR\.123" /v "" /t REG_SZ /d "123-File" /f
Reg.exe add "HKCR\123-File" /v "" /t REG_SZ /d "123 Просмотрщик" /f
Reg.exe add "HKCR\123-File\shell\Open\command" /v "" /t REG_SZ /d "\"%ExeFile%\" \"%%1\"" /f
Reg.exe add "HKCR\123-File\DefaultIcon" /v "" /t REG_SZ /d "\"%ExeFile%\",1" /f
Автор: Taran2ul
Дата сообщения: 25.09.2010 20:50
NIKZZZZ
На выходе получим bat с относительным путем?
Автор: Free_Soft
Дата сообщения: 25.09.2010 21:13
можно ли каким либо образом запустить екзешник из планировщика, чтобы UAC на него не реагировал?
Использую такую конструкцию:

Код: schtasks /create /tn "myTask" /tr My.exe /sc daily /mo 29 /f
Автор: NIKZZZZ
Дата сообщения: 25.09.2010 21:25
Taran2ul

Цитата:
На выходе получим bat с относительным путем?

Нет, надо вручную заменить путь на переменную, которая определена в начале батника.
Автор: wolf0425
Дата сообщения: 25.09.2010 21:57

Цитата:
Есть вопрос в bat-файлах можно задействовать "двойную" рекурсию?
поясни что имеешь в виду
Автор: LomikXP
Дата сообщения: 25.09.2010 22:18
wolf0425

Например, рекурсивный вызов, в котором еще два рекурсивных вызова.

Код:
:процедура аргумент1 аргумент2
операции или выход
call :процедура x y
call :процедура a b
exit /b
Автор: Taran2ul
Дата сообщения: 25.09.2010 22:45
NIKZZZZ
так вводить надо хоть и один раз, а автоматом никак не прокатит?
Автор: 01MDM
Дата сообщения: 25.09.2010 23:00
LomikXP

Цитата:
Например, рекурсивный вызов, в котором еще два рекурсивных вызова.

Т.е. процедура вызывает сама себя два раза?
Не знаю правильно ли понял:

Код:
@echo off
setlocal

:1
if not defined arg1 (
if not defined arg2 (set "arg1=true") else (
    echo %1 %2
    set "arg1="
    set "arg2=true"
)) else (
    echo %1 %2
    goto:eof
)
    
call:1 1 2
call:1 3 4
Автор: Free_Soft
Дата сообщения: 25.09.2010 23:09
01MDM

Код: schtasks /create /tn "myTask" /tr My.exe /sc daily /mo 29 /f
Автор: LomikXP
Дата сообщения: 25.09.2010 23:23
01MDM
Почти, не считая того, что аргументы для следующего этапа заново вычисляются, т.е. в конце
call:1 %arg1% %arg2%
call:1 %arg3% %arg4%

И перед вторым вызовом (call:1 %arg3% %arg4%) вычисленные перед первым вызовом или непосредственно перед ним самим аргументы теряют свои значения, т.к. в первом вызове аргументы переписываются заново (и тип %1 и тип %a%).

Отсюда я заключил, что "двойная" рекурсия невозможна.
P.S. Я написал программу с помощью циклов, т.к. не смог реализовать "двойную" рекурсию.

Добавлено:
Вообще, нужно было реализовать заполнение бинарного дерева таким образом:

Код:
1
2 3
4 5 6 7
8 9 10 11 12 13 14 15
Автор: Mark_Titov
Дата сообщения: 26.09.2010 00:06
Вопрос решен, мож кому пригодится -

Код: @Echo Off
Setlocal EnableDelayedExpansion

Set N_Col=40
Set cntA=100
Set cnt=0
for /l %%i in (0,2,98) do (
dd bs=%$z%c >nul 2>&1
ping -n 1 127.0.0.1 >nul
Call :Bar
)
pause >nul& exit

:Bar
If %cnt%==0 (
For /L %%a In (1,1,%N_Col%) Do Set Line0=!Line0!
)
Set /a Inc=((%cnt%+2)*%N_Col%)/%cntA%-(%cnt%*%N_Col%)/%cntA%
If %Inc% GTR 0 For /L %%a In (1,1,%Inc%) Do <Nul Set /p X= Ы
Set /a cnt+=2
Set /a prsnt=cnt*100/cntA
Title %1 %prsnt%%% Loaded
Автор: Free_Soft
Дата сообщения: 26.09.2010 10:04
Как можно получить значение текущего времени на минуту раньше?
Автор: bomzzz
Дата сообщения: 26.09.2010 10:06
минуту что ли отнять, или раньше чем что
Автор: Free_Soft
Дата сообщения: 26.09.2010 10:32
bomzzz
Да, отнять минуту
Автор: Nomolos
Дата сообщения: 26.09.2010 10:34
Доброго времени суток!
Поискал не получилось
Подскажите пожалуйста, какой вариант проще реализовать, и по возможности помогите:
1. Есть 2 файлика, один так сказать эталонный второй изменяется в процессе работы.
Как сравнить 2 этих файла и если разница есть выполнить определенные действий, если нет перейти к следующему заданию.
2. Есть файлик формата dbf 2 строки 2 столбца, во одной из ячеек цифра. Если она равна нулю тогда выполнить следующее задание, если не равна то выполнить текущее задание и перейти к следующему.
Вообщем то оба задания осложняются тем что:
1. Файл может иметь изменения не только в начале файла, а еще и в конце и по середине и т.д. т.е. вообще может изменится, как это отследить
2. Как вообще можно парсировать dbf файлик не прибегая к стороним утилитам
Автор: bomzzz
Дата сообщения: 26.09.2010 10:39
как как возьми да отними, сравни с нулем - если меньше нуля: прибавь 60 и отними 1 от часов, потом сравни часы с 0 ............
Автор: NIKZZZZ
Дата сообщения: 26.09.2010 10:54
Nomolos

Цитата:
1. Есть 2 файлика, один так сказать эталонный второй изменяется в процессе работы.


Код: FC file1.txt file2.txt | FIND "различия не найдены" > nul
IF ERRORLEVEL 1 Действие
Автор: Free_Soft
Дата сообщения: 26.09.2010 10:59
bomzzz
если от 03 минут отнять 1, получится 2 без нуля впереди
Автор: bomzzz
Дата сообщения: 26.09.2010 11:18
а ты допиши нолик

Добавлено:
set minutes=0%minutes%
set minutes=%minutes~-2%
Автор: Free_Soft
Дата сообщения: 26.09.2010 11:41
bomzzz
можешь помочь тупому? как это применить к %time%?
Автор: bomzzz
Дата сообщения: 26.09.2010 12:18
Free_Soft
ну делать надо. и я откуда знаю как тебе надо. с датой или без
set MYTIME=%TIME%
set seconds=%MYTIME:~6,2%
set minutes=%MYTIME:~3,2%
set hours=%MYTIME:~0,2%

set /a minutes=%minutes%-1
if %minutes% LSS 0 goto :METKA

:METKA1
set minutes=0%minutes%
set minutes=%minutes~-2%

echo %hours%%minutes%%seconds%
goto :EOF

:METKA
set /a minutes=%minutes%+60
set /a hours=%hours%-1
if %hours% LSS 0 set hours=23
set hours=0%hours%
set hours=%hours~-2%
goto :METKA1

ну и так далее
Автор: Free_Soft
Дата сообщения: 26.09.2010 12:23
bomzzz
нужно только время, часы и минуты. Без секунд и даты
Автор: bomzzz
Дата сообщения: 26.09.2010 12:26
ну я так и начал делать.

Добавлено:
дописькал тама почти уже до конца
Автор: Free_Soft
Дата сообщения: 26.09.2010 12:31
bomzzz
минуты почему то не показывает
Автор: bomzzz
Дата сообщения: 26.09.2010 12:35
ну чета напутал. разбирайся
Автор: 01MDM
Дата сообщения: 26.09.2010 12:38
Free_Soft

Цитата:
как сюда еще можно прикрутить

А зачем тебе это прикручивать прямо в задание? Составь батник со всем хозяйством, а вот его уже добавь в планировщик.
Автор: bomzzz
Дата сообщения: 26.09.2010 12:44
двоеточие пропустил. вроде работкаит с минутками, переведет ли час ???

Цитата:

ECHO OFF
COLOR 9F
CLS

set MYTIME=%TIME%
set seconds=%MYTIME:~6,2%
set minutes=%MYTIME:~3,2%
set hours=%MYTIME:~0,2%
rem echo %hours%%minutes%%seconds%
set /a minutes=%minutes%-1

if %minutes% LSS 0 goto :METKA

:METKA1

set minutes=0%minutes%
set minutes=%minutes:~-2%

echo %hours%%minutes%%seconds%
PAUSE
goto :EOF

:METKA

set /a minutes=%minutes%+60
set /a hours=%hours%-1
if %hours% LSS 0 set hours=23
set hours=0%hours%
set hours=%hours:~-2%
goto :METKA1

pause


Добавлено:
можно проще сделать - если минуты равны нулю, то минуты равны 59 а часы ...... ну и так далее

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Windows 7 Starter


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