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

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

Автор: euheny
Дата сообщения: 01.04.2007 04:28
Elroir
Сразу два вопроса:
Это вариант очень упрощён , а если нужно скажем заменить С: на Y: и в другом ключе , параметре или значении.Или в разделе с вложениями.
Интересно также насколько реально модифицировать бинарное значение , в котором текстовые данные (обычно юникод).
И ещё.
Мне нужно(вобще-то желательно) это выполнять из другой программы как из "выполнить",т.е. cmd /c for и т.д.
Переменные я определяю заранее во внешней программе.
Вобщем если даже и не использовать переменные из батника работает , а из "выполнить" не хочет
Автор: Elroir
Дата сообщения: 01.04.2007 08:52
euheny

Цитата:
Это вариант очень упрощён

Этот вариант показывает в общем виде, как надо работать с реестром:
reg query [ЛЮБАЯ_НУЖНАЯ_ВЕТКА] /v [НУЖНОЕ_ЗНАЧЕНИЕ] - выдаст информацию о типе значения и само значение. При этом, если использовать ту конструкцию for, которую я привел, у тебя будут определены две переменные с этими данными.
Эти переменные можно сравнивать с чем угодно и изменять как угодно.
reg add [ЛЮБАЯ_НУЖНАЯ_ВЕТКА] /v [НУЖНОЕ_ЗНАЧЕНИЕ] /t [ТИП_ДАННЫХ] /d [ДАННЫЕ] /f - добавляет или заменят значение в реестре.
Если нужно заменить значения еще где-то - просто добавляешь эти команды с теми значениями, которые нужно изменить.

Цитата:
Интересно также насколько реально модифицировать бинарное значение , в котором текстовые данные (обычно юникод).

Если я правильно понимаю - реально. Но не встроенными средствами командной строки. Нужны либо внешние утилиты, либо программка на VBScript. Общая схема такова - считываем значение, декодируем его, изменяем, записываем обрато. Я где-то видел VBScript код, который переводит бинарные значения в текст, но сейчас не помню где.

Цитата:
Вобщем если даже и не использовать переменные из батника работает , а из "выполнить" не хочет

Если for состоит из более чем одной строки, запустить его через "выполнить" не получится.
Автор: ASSEL
Дата сообщения: 01.04.2007 09:16
всем доброго дня!!! помогите плейз! мне нужен bat-файл который решает эту задачку....
Задание
Пусть имеется текстовый файл protocol.txt, в котором хранится журнал обработанных файлов в следующем формате:

Имя: Sula04.txt Дата: 02.01.2001 Время: 14:50
Имя: Sula23.txt Дата: 03.02.2001 Время: 23:50
Имя: assel86.txt Дата: 02.01.2001 Время: 12:00
Имя: soft.txt Дата: 10.01.2000 Время: 13:00

Слово Дата здесь начинается в каждой строке с двадцатой позиции. Необходимо написать командный файл, с помощью которого сделать выборку из этого файла (т.е. создать новый текстовый файл с нужной информацией) за заданный месяц (ММ) и год (ГГГГ) в файл ММГГГГ.txt, сформированный файл упорядочить по дате обработки. Нужный месяц и год указать как параметры командной строки.
спасибо!!!
Автор: Maza Faka
Дата сообщения: 01.04.2007 09:40
ASSEL

Код:
@ЕСНО OFF
IF "%1"=="" GOTO NoParam
IF "%2"=="" GOTO NoParam
FIND "%1.%2" protokol.txt | SORT /+26 > %1%2.txt
GOTO End
:NoParam
ECHO He заданы необходимые параметры командной строки!
PAUSE
:End
Автор: ASSEL
Дата сообщения: 01.04.2007 10:08

Цитата:
Maza Faka

огромное приогромное спасибо!
Автор: Bablo
Дата сообщения: 01.04.2007 20:28
помогите зделать пинговалку, это нужно для проверки интернет соединения.
обычно всегда набираю вручную ping yandex.ru
Автор: 01MDM
Дата сообщения: 01.04.2007 22:50
Подскажите как добавить описание (Description) во вновь созданную службу?

Код:
instrsrv Testsrv srvany
reg add hklm\system\currentcontrolset\services\Testsrv\Parameters /v Application /t reg_sz /d mycommand /f
sc config type= own type= interact DisplayName= "Test Service"
Автор: igor_andreev
Дата сообщения: 01.04.2007 23:21
Bablo
Сделай этот топик "Версией для печати" и ищи слово ping, найдешь примеры
01MDM
Так ты посмотри хоть в HKLM\SYSTEM\CurrentControlSet\Services где у остальных сервисов описание находится REG_SZ Description...
Автор: duck33
Дата сообщения: 02.04.2007 01:12
Срочно нужна помощь!
Файл нужен для печати из Линукс через Вин машину.
Почему он не работает, если его запускать виндовым планировщиком. Вернее, он только удаляет файл ( ... && del /q %%i)?
Сам файл:

@echo off
for %%i in (c:\temp\spool\*.pdf) do "C:\windows\gdputil.exe" -runkill 30 "C:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe" /p /h %%i && del /q %%i
GoTo :EOF

Если запускать руками, все работает.
Автор: euheny
Дата сообщения: 02.04.2007 03:39
Elroir
Я вёл речь вот о чём.
reg query [ЛЮБАЯ_НУЖНАЯ_ВЕТКА] (для усложнения без /v) выводит в зависимости от [ЛЮБАЯ_НУЖНАЯ_ВЕТКА] несколько кбайт текста .
Этот текст нужно обработаь так , чтобы некоторые последовательности символов и цифр были замеенены некоторыми другими последовательностями символов и цифр.ЛЮБАЯ_НУЖНАЯ_ВЕТКА теперь удаляется(чтобы лишнего не было)
Ну а текст собирается назад в реестр.

Цитата:
программка на VBScript

Прямо сейчас не надо , но потом может понадобится.Я посммотрю возможности autoit и если ничего не найду попозже переспрошу.
Цитата:
Если for состоит из более чем одной строки
Я крутил его и так и так - вобщем в конце концов заработал.Правда интересно какова максимальная длина команды.


Автор: Maza Faka
Дата сообщения: 02.04.2007 08:00
Bablo

Цитата:
помогите зделать пинговалку, это нужно для проверки интернет соединения.
обычно всегда набираю вручную ping yandex.ru

Поконкретней, что именно нужно? Выдавать сообщение при отсутствии пинга?
Автор: NIKZZZZ
Дата сообщения: 02.04.2007 09:28
duck33

Может так заработает ?


Код:
@echo off
for %%i in (c:\temp\spool\*.pdf) do (
"C:\windows\gdputil.exe" -runkill 30 "C:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe" /p /h %%i
del /q %%i
)
GoTo :EOF
Автор: GORA2
Дата сообщения: 02.04.2007 11:55
igor_andreev

Цитата:
У меня оба примера почему-то работают

Извините, привел не все условия
Код: setlocal enabledelayedexpansion
set useUPX=1
IF %useUPX%==1 (
set SFXsize=12345
set delta=67890
echo !SFXsize!
echo !delta!
set /a Hpers=delta*100/(SFXsize+delta)
echo !Hpers!
set /a Lpers=delta*1000/(SFXsize+delta)-Hpers*10
echo !Lpers!
set persent=!Hpers!.!Lpers!
echo !persent!
)
Автор: 01MDM
Дата сообщения: 02.04.2007 12:09
igor_andreev

Цитата:
Так ты посмотри хоть в HKLM\SYSTEM\CurrentControlSet\Services где у остальных сервисов описание находится REG_SZ Description...


Да действительно, нетерпелость решить проблему, а Большого компа под рукой не было...

Автор: Elroir
Дата сообщения: 02.04.2007 12:27
GORA2

Цитата:
Что я делаю не так?

Все делаешь так - проблема не в командах set, а в обработке скобок оператора if. Видимо какой-то баг. Если убрать скобки if-a, все прекрасно работает.
Можно немного видоизменить конструкцию:

Код:
setlocal enabledelayedexpansion
set useUPX=1
IF not %useUPX%==1 goto skip
set SFXsize=12345
set delta=67890
echo !SFXsize!
echo !delta!
set /a Hpers=delta*100/(SFXsize+delta)
echo !Hpers!
set /a Lpers=delta*1000/(SFXsize+delta)-Hpers*10
echo !Lpers!
set persent=!Hpers!.!Lpers!
echo !persent!
:skip
...
...
Автор: GORA2
Дата сообщения: 02.04.2007 12:57
Elroir
Дело в том, что все это вложено еще в один if. И без скобок то у меня работает (для этого ввожу еще одну переменную равную выражению в скобках), но я хотел узнать ПОЧЕМУ не работает так как должно работать. В описании команды set не ограничений на скобки и их использование. Хотел понять где грабли. Значит это баг и не чего в эту сторону искать. Спасибо.
Автор: NIKZZZZ
Дата сообщения: 02.04.2007 13:11
GORA2

Цитата:
В описании команды set не ограничений на скобки и их использование.


Повидимому он не понимает, к чему относится закр. скобка.


Код:
setlocal enabledelayedexpansion
set useUPX=1
IF %useUPX%==1 (
set SFXsize=12345
set delta=67890
echo !SFXsize!
echo !delta!
set /a "Hpers=delta*100/(SFXsize+delta)"
echo !Hpers!
set /a "Lpers=delta*1000/(SFXsize+delta)-Hpers*10"
echo !Lpers!
set persent=!Hpers!.!Lpers!
echo !persent!
)

Автор: GORA2
Дата сообщения: 02.04.2007 13:33
NIKZZZZ
За кавычки спасибо, не знал. Заработало!
Автор: Levitant
Дата сообщения: 02.04.2007 16:11
здравсвтуйте все снова.
Такой вопросик. Вообще возможно ли с помощью бат файла настройить VPN подлкючение? И если возможно то не подскажите пожалуйста как это можно сделать...
Автор: StanislavG
Дата сообщения: 02.04.2007 16:40
Elroir

У меня проблема что может быть первого числа не собираються файлы:
rem @echo off
rem start %time%
setlocal
set "dt=%date%"
FOR %%I IN (*.old,*.rsa,*.ind,*.key,*.pud,*.rsa,*.lo1,*.er1,*.err,*.nbu,*.pub,*.new,*.log) DO call :finddate "%%I" %dt:~0,2% %dt:~3,2% %dt:~6,4%

c:\tcpfoss.452\log\*.nbu c:\tcpfoss.452\jnin\test\
arj a c:\tcpfoss.452\jnin\jour%prevm%.arj c:\tcpfoss.452\log\*.nbu
move c:\tcpfoss.452\log\*.nbu w:\nbumail\journal

rem cd w:\nbumail\journal
REM arj32 m w:\nbumail\journal\jour%prevd%%prevm%.dh0 w:\nbumail\journal\ *.old *.rsa *.ind *.key *.pud *.rsa *.lo1 *.er1 *.err *.nbu *.pub *.new *.log

goto :EOF

:finddate
for /F "usebackq tokens=1,2,3,4 delims=. " %%A IN (`"dir /T:C %1 | find %1"`) DO call :test %%A %%B %%C %1 %2 %3 %4
goto :EOF

:test
rem File's date
set "fd=%1"
set "fm=%2"
set "fy=%3"
rem Get rid of leeding zero
if %fd% LSS 10 set "fd=%fd:~-1%"
rem if %fm% LSS 10 set "fm=%fm:~-1%"
rem if %fy% LSS 10 set "fm=%fy:~-1%"
rem Current date
set "curd=%5"
set "curm=%6"
set "cury=%7"
rem Get rid of leeding zero
if %curd% LSS 10 set "curd=%curd:~-1%"
rem if %curm% LSS 10 set "curm=%curm:~-1%"
rem if %cury% LSS 10 set "cury=%cury:~-1%"

set /a "prevd=%curd%-1"
set "prevm=%curm%"
set "prevy=%cury%"
set "prevye=%cury%"
if %curm%==12 ( set "prevme=11"& set "days=30")
if %curm%==11 ( set "prevme=10"& set "days=31")
if %curm%==10 ( set "prevme=9"& set "days=30")
if %curm%==9 ( set "prevme=8"& set "days=31")
if %curm%==8 ( set "prevme=7"& set "days=31")
if %curm%==7 ( set "prevme=6"& set "days=30")
if %curm%==6 ( set "prevme=5"& set "days=31")
if %curm%==5 ( set "prevme=4"& set "days=30")
if %curm%==4 ( set "prevme=3"& set "days=31")
if %curm%==3 ( set "prevme=2"& set "days=28")
if %curm%==2 ( set "prevme=1"& set "days=31")
if %curm%==1 ( set "prevme=12"& set "days=31"& set /a "prevye=%prevy%-1")
if %prevd% LEQ 0 (
set /a "prevd=%days%+%prevd%"
set "prevm=%prevme%"
set "prevy=%prevye%")
set "match=true"
if not "%fd%"=="%prevd%" ( set "match=false")
if not "%fm%"=="%prevm%" ( set "match=false")
if not "%fy%"=="%prevy%" ( set "match=false")
if "%match%"=="true" (
copy c:\tcpfoss.452\%4 c:\tcpfoss.452\jnin\test\
arj a c:\tcpfoss.452\jnin\jour%prevm%.arj c:\tcpfoss.452\%~4
c:\tcpfoss.452\log\*.nbu c:\tcpfoss.452\jnin\test\
arj a c:\tcpfoss.452\jnin\jour%prevm%.arj c:\tcpfoss.452\log\*.nbu
move c:\tcpfoss.452\%4 w:\nbumail\journal
move c:\tcpfoss.452\log\*.nbu w:\nbumail\journal)
Автор: Elroir
Дата сообщения: 02.04.2007 19:16
StanislavG
То есть не собираются файлы датированные последним числом предыдущего месяца?
Это только в этом месяце произошло или в прошлом тоже?
Автор: StanislavG
Дата сообщения: 02.04.2007 19:33
Elroir

Да точно за 28 февраля не собрались я посмотрел и думал что исправил но индюк тоже думал. 1 числа за 31 не собрались файлы
Автор: Elroir
Дата сообщения: 02.04.2007 19:36
StanislavG
Зачем закомментированы выделенные строки? Именно из-за этого и не работает.

Код:
:test
rem File's date
set "fd=%1"
set "fm=%2"
set "fy=%3"
rem Get rid of leeding zero
if %fd% LSS 10 set "fd=%fd:~-1%"
rem if %fm% LSS 10 set "fm=%fm:~-1%"
rem if %fy% LSS 10 set "fm=%fy:~-1%"
rem Current date
set "curd=%5"
set "curm=%6"
set "cury=%7"
rem Get rid of leeding zero
if %curd% LSS 10 set "curd=%curd:~-1%"
rem if %curm% LSS 10 set "curm=%curm:~-1%"
rem if %cury% LSS 10 set "cury=%cury:~-1%"
Автор: StanislavG
Дата сообщения: 02.04.2007 20:30
Надо вспомнить сейчас попробую и скажу
Автор: soulproxy
Дата сообщения: 02.04.2007 20:39
Назрел вопрос, можно ли как-либо запретить пользователям запись в подпапку сетевой папки ?
Нужно для того, что бы никто ничего не наворотил во время бекапа. (Сетевые сеансы я завершаю, но этого явно недостаточно, так как иногда работает ночная смена.)
Автор: StanislavG
Дата сообщения: 02.04.2007 20:42
Elroir
Вот у меня создаеться архив с таким назвнием jour003.arj
Автор: Elroir
Дата сообщения: 02.04.2007 21:31
StanislavG
Не понял - когда создается? Какой должен создаваться?
Автор: Bablo
Дата сообщения: 02.04.2007 21:59

Цитата:
Поконкретней, что именно нужно? Выдавать сообщение при отсутствии пинга?

нужно чтобы при запуске bat файла появлялась командная строка, и можно было понять есть пинг или нету.
весь топик просмотрел, но не нашёл того что нужно...
Win XP SP2

Автор: Elroir
Дата сообщения: 02.04.2007 22:20
Bablo

Код:
@echo off
ping -n 1 www.google.com | find "TTL="
if %errorlevel%==0 (echo Ping is GOOD) else (echo Ping is BAD)
pause
Автор: Bablo
Дата сообщения: 02.04.2007 23:05
странно но не работает, пробовал на двух компах

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Сбой активации XP sp2


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