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

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

Автор: drewha
Дата сообщения: 03.08.2006 13:38
GarEx
Пример:
set HOST_NAME=
set /P HOST_NAME=Enter database host. (default=[localhost]):
if "%HOST_NAME%"=="" set HOST_NAME=localhost
Автор: GarEx
Дата сообщения: 03.08.2006 15:54
Спасибо. Но не совсем то. Может я не точно описал ситуацию?

Есть ряд бат-файлов. В первом из них прописаны только переменные среды и вызов следующего бат-файла. Пути "D:\Garant\Auto", "D:\Garant", "D:\Base" используются во всех следующих батниках. И для того, чтобы не менять пути во всех батниках, был создан один, в котором и заданы переменные среды. Чтобы в случае, если будет осуществляться запуск на другой машине, пришлось бы только подправить записи в первом батнике.

Сейчас появилась необходимость это еще упростить и слегка автоматизировать. Т.е. чтобы было таким образом:
1. "Введите путь к программе GarantPath="
2. Пользователь вводит путь (например С:\program files\garant)
3. Путь прописывается в переменной среде GarantPath т.е. стало (set GarantPath=С:\program files\garant)
4. Введите путь к оптимизированной базе
и т.д.

Заранее спасибо
Автор: KapralBel
Дата сообщения: 03.08.2006 16:00
GarEx
Так тебе drewha и ответил
Чем не то?
Автор: drewha
Дата сообщения: 03.08.2006 16:14
GarEx

set /P GarantPath=Введите путь к программе GarantPath:

Так понятней?
Автор: GarEx
Дата сообщения: 03.08.2006 17:21
Да загвоздка не там была. Разобрался. Все работает.
Только вместо [ =="" ] надо [ ==" " ] Тогда по умолчанию принимает.
Автор: Valdon
Дата сообщения: 03.08.2006 18:53
Народ, мот кто знаить как из батника узнать переменную %windir% на удаленной тачке????
Проблема в следующем (к примеру):
Запускаю из батника
SC \\RemotePC create Имя_службы binpath= "C:\windows\system32\Имя программы"
Все OK когда винда на удаленном компе расположена в C:\windows\. А как быть в других случаях(Например, форточки находятся \\RemotePC\D:\winnt)?????
Автор: slech
Дата сообщения: 03.08.2006 22:04
Valdon
Так и пишешь
sc \\PC create sv binpath= %SystemRoot%\System32\sv.exe
sc \\PC create sv binpath= %Windir%\System32\sv.exe


Добавлено:
Кто подскажет ?
echo %dtDay%.%dtMonth%.%dtYear% работает
ren xz.txt %dtDay%.%dtMonth%.%dtYear% работает
ren xz.txt %dtDay%.%dtMonth%.%dtYear%.txt Ошибка в синтаксисе команды
Автор: Kirillhome
Дата сообщения: 03.08.2006 22:59
slech

Цитата:
Кто подскажет ?
echo %dtDay%.%dtMonth%.%dtYear% работает

А что данная команда выводит? (Понятно, что должна выводить, но что на самом деле выводится???)
И ещё - "напоминание" - о "плохих" числах 08, 09 (для команды Set Числовые значения рассматриваются как десятичные, если перед ними не стоит префикс 0x для шестнадцатеричных чисел, и 0 для восьмеричных чисел. Например, числа 0x12, и 022 обозначают десятичное число 18. Обратите внимание на запись восьмеричных числе: 08 и 09 не являются допустимыми числами, так как в восьмеричной системе исчисления цифры 8 и 9 не используются.) - а сейчас как раз начался восьмой месяц...
Автор: slech
Дата сообщения: 03.08.2006 23:22
Kirillhome
Задача переиименовывать файлик задним числом.
Set dt=%Date%
Set dtDay=%date:~0,2%
Set dtMonth=%date:~3,2%
Set dtYear=%date:~-4%
Set /a dtDay=%dtDay%-1
If %dtDay%==0 (Set /A dtMonth=%dtMonth%-1)
If %dtMonth%==0 (Set /a dtYear=%dtYear%-1) & (Set dtMonth=12)
If %dtDay%==0 (
If %dtMonth%==01 (Set dtDay=31)
If %dtMonth%==03 (Set dtDay=31)
If %dtMonth%==05 (Set dtDay=31)
If %dtMonth%==07 (Set dtDay=31)
If %dtMonth%==08 (Set dtDay=31)
If %dtMonth%==10 (Set dtDay=31)
If %dtMonth%==12 (Set dtDay=31)
If %dtMonth%==02 (Set dtDay=28)
If %dtMonth%==04 (Set dtDay=30)
If %dtMonth%==06 (Set dtDay=30)
If %dtMonth%==09 (Set dtDay=30)
If %dtMonth%==11 (Set dtDay=30)
)
Set dt

echo %dtDay%.%dtMonth%.%dtYear%
2.08.2006


думаю что дело не в месяце:
ren xz.txt %dtMonth%.%dtMonth%.%dtMonth%.txt работает
Автор: Kirillhome
Дата сообщения: 03.08.2006 23:39
slech
Ну вот и ошибка
Set dtYear=%date:~-4%

Надо убрать пробелы после ~4%

Во всяком случае, у меня (с пробелами) выдаёт следующее
ren xz.txt 3.08.2006 .txt
Ошибка в синтаксисе команды.


Ну, а без пробелов - всё нормально
Автор: Refugee
Дата сообщения: 03.08.2006 23:45
Valdon
SC \\RemotePC create Имя_службы binpath= %%SystemRoot%%\System32\sv.exe
Автор: slech
Дата сообщения: 04.08.2006 08:10
Kirillhome
Спасибо.
Блиин я и незаметил.

Добавлено:
KapralBel
Где в твоём коде поменять чтобы Day было в формате xx, а не x
Set dt=%Date%
Set dtDay=%date:~0,2%
Set dtMonth=%date:~3,2%
Set dtYear=%date:~-4%
Set /a dtDay=%dtDay%-1
If %dtDay%==0 (Set /A dtMonth=%dtMonth%-1)
If %dtMonth%==0 (Set /a dtYear=%dtYear%-1) & (Set dtMonth=12)
If %dtDay%==0 (
If %dtMonth%==01 (Set dtDay=31)
If %dtMonth%==03 (Set dtDay=31)
If %dtMonth%==05 (Set dtDay=31)
If %dtMonth%==07 (Set dtDay=31)
If %dtMonth%==08 (Set dtDay=31)
If %dtMonth%==10 (Set dtDay=31)
If %dtMonth%==12 (Set dtDay=31)
If %dtMonth%==02 (Set dtDay=28)
If %dtMonth%==04 (Set dtDay=30)
If %dtMonth%==06 (Set dtDay=30)
If %dtMonth%==09 (Set dtDay=30)
If %dtMonth%==11 (Set dtDay=30)
)
Set dt


Заранее спасибо.
Автор: Valdon
Дата сообщения: 04.08.2006 10:23
Refugee, в случае
SC \\RemotePC create Имя_службы binpath= %%SystemRoot%%\System32\sv.exe
К примеру, если винда локальной тачки расположена C:\windows, а удаленной D:\Winnt, получим:
binpath= %C:\windows%\System32\sv.exe
slech, в случае
Так и пишешь
sc \\PC create sv binpath= %SystemRoot%\System32\sv.exe
sc \\PC create sv binpath= %Windir%\System32\sv.exe
получим:
binpath= C:\windows\System32\sv.exe

А необходимо binpath= D:\Winnt\System32\sv.exe
Народ, памагите плиззз!!!!!
Автор: slech
Дата сообщения: 04.08.2006 10:34
Valdon
Да ты прав.
Когда мы пишем %Windir% система смотрит наши параметры а не удалённой машины. Это проблема.

Может для начала сделать так:
sc \\192.168.0.11 qc Alerter
SERVICE_NAME: alerter
TYPE : 20 WIN32_SHARE_PROCESS
START_TYPE : 3 DEMAND_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : C:\WINDOWS\System32\svchost.exe -k LocalService
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : Alerter
DEPENDENCIES : LanmanWorkstation
SERVICE_START_NAME : NT AUTHORITY\LocalService

А отсюда выдрать %windir%
Автор: ALEF
Дата сообщения: 04.08.2006 10:36
Для того чтобы в WinXP из командной строки изменить параметры IP для сетевого подключения успешно применяется команда вида:

Код: netsh interface ip set address name="Имя интерфейса" source=static addr=<Адрес> mask=<Маска> gateway=<Шлюз>
Автор: Kirillhome
Дата сообщения: 04.08.2006 12:05
slech
Я для себя "переписал" всё таким образом:

Код:
@echo off
set T_Date=%DATE%
IF %T_DATE:~0,1%==0 (
SET /A T_DAY=%T_DATE:~1,1%) else (
SET /A T_DAY=%T_DATE:~0,2%)

IF %T_DATE:~3,1%==0 (
SET /A T_MONTH=%T_DATE:~4,1%) else (
SET /A T_MONTH=%T_DATE:~3,2%)

SET /A T_YEAR=%T_DATE:~6,4%

set /A T_DAY=%T_DAY%-1
if %T_DAY%==0 (
SET /A T_MONTH=%T_MONTH%-1
if %T_MONTH%==0 (
set /A T_YEAR=%T_YEAR%-1
SET /A T_MONTH=12
set /A T_DAY=31)
else (
if %T_MONTH%==1 (Set /A T_Day=31)
if %T_MONTH%==2 (Set /A T_Day=28)
if %T_MONTH%==3 (Set /A T_Day=31)
if %T_MONTH%==4 (Set /A T_Day=30)
if %T_MONTH%==5 (Set /A T_Day=31)
if %T_MONTH%==6 (Set /A T_Day=30)
if %T_MONTH%==7 (Set /A T_Day=31)
if %T_MONTH%==8 (Set /A T_Day=31)
if %T_MONTH%==9 (Set /A T_Day=30)
if %T_MONTH%==10 (Set /A T_Day=31)
if %T_MONTH%==11 (Set /A T_Day=30)
if %T_MONTH%==12 (Set /A T_Day=31)
)
)

if %T_MONTH% LSS 10 (if %T_DAY% LSS 10 (echo 0%t_Day%.0%t_Month%.%t_Year%.txt) else echo %t_Day%.0%t_Month%.%t_Year%.txt) else (echo %t_Day%.%t_Month%.%t_Year%.txt)
Автор: Valdon
Дата сообщения: 04.08.2006 12:27
Можна и отсюдава выдрать %windir% удаленной тачки

bootcfg /query /s RemotePC

Параметры загрузки
----------------------------
timeout: 0
default: multi(0)disk(0)rdisk(0)partition(2)\WINNT
Элементы списка загрузки
------------------------
Идентификатор загрузочной записи: 1
Имя: "Microsoft Windows 2000 Professional RUS"
Путь: multi(0)disk(0)rdisk(0)partition(2)\WINNT
Параметры загрузки ОС: /fastdetect

Идентификатор загрузочной записи: 2
Имя: "Microsoft Windows"
Путь: C:\
Параметры загрузки ОС: N/A

НО может быть ктонить подскажет более изящное решение по поводу определения %SystemRoot% на удаленной тачке ???
Автор: CYBORG1980
Дата сообщения: 04.08.2006 13:23
Может так....

wmic /node:remotepc os get SystemDirectory
Автор: Valdon
Дата сообщения: 04.08.2006 13:41
Ну блин, все вааще проста:
Если локалный %systemroot%=C:\windows а удаленный %systemroot%=D:\winnt,
делаем так:
Set Var1=Systemroot
sc \\RemotePC create Имя_Службы binpath= %%Var1%%\System32\Имя_программы

В итоге имеем:
binpath= D:\winnt\System32\Имя_программы
Автор: slech
Дата сообщения: 04.08.2006 13:48
Valdon
Ха, прикольно.
Автор: ARiNO
Дата сообщения: 04.08.2006 14:07
Ребята, есть??? готовые батчики, чтоб до запуска системы (допустим Виня2000) удаляли определенные файлы со всех диррикторий (типа C:/*.tmp, D:/*.tmp, Z:/*.tmp) ?
Автор: slech
Дата сообщения: 04.08.2006 14:11
ARiNO
Ты просишь или предлогаешь ?
Автор: ARiNO
Дата сообщения: 04.08.2006 14:16
Slech, спасибо за поправку, прошу
Автор: Evig
Дата сообщения: 04.08.2006 14:24
Приветствую обитателей.Такой вопросец.Есть сетка,имеющая один общий выход в интернет через аппаратный роутер-файервол и АДСЛ-мопед. Как можно получить c одной из машин,болтающихся внутри сети,и передать Blatу внешний IP адрес?
Автор: Valdon
Дата сообщения: 04.08.2006 14:28
Ну блин бред какойто.....
Делаю следующее:
пуск->выполнить->cmd
>set var1=Systemroot
>sc \\RemotePC create SC binpath= %%Var1%%\System32\SC.EXE
>sc \\RemotePC qc SC
>BINARY_PATH_NAME : D:\WINNT\system32\r_server.exe

Создаю и запускаю батничек следующего содержания:
set var1=Systemroot
sc \\RemotePC create SC binpath= %%Var1%%\System32\SC.EXE
sc \\RemotePC qc SC>c:\temp.txt

Содержимое c:\temp.txt:
BINARY_PATH_NAME : %var1%\system32\r_server.exe

Ничего не понимаю, разъясните плиз......
Автор: slech
Дата сообщения: 04.08.2006 14:57
ARiNO
Я думаю тебе надо сделать батничек вида

@echo off
del c:\*.tmp /Q /S
del d:\*.tmp /Q /S
del e:\*.tmp /Q /S

И запустить его сервисом - смотри шапку.
Автор: ARiNO
Дата сообщения: 04.08.2006 15:05
Спасибо, попробую.
Автор: slech
Дата сообщения: 04.08.2006 15:14
Kirillhome
А если бедет 10 число ?
Автор: Kirillhome
Дата сообщения: 04.08.2006 15:28
slech
1) Всё перевожу в числа
SET /A ...
2) Насколько я смог, я предусмотрел, что бы не появлялись числа типа 08, 09
IF %T_DATE:~0,1%==0 (
SET /A T_DAY=%T_DATE:~1,1%) else (
SET /A T_DAY=%T_DATE:~0,2%)
3) Если число в дате или в месяце меньше 10, то тогда (при выводе) оно дополняется 0
if %T_MONTH% LSS 10 .... echo %t_Day%.0%t_Month%.%t_Year%.txt
4) Если больше или равно - то тогда смотри else
Автор: Refugee
Дата сообщения: 04.08.2006 15:35
Valdon
У меня в батнике %%SystemRoot%% работает правильно.
binPath= %%systemroot%% значит создать в реестре путь с %systemroot%, и Windows на той машине переведет %systemroot% в значение при запуске сервиса

[more=мой батник для установки радмина]
if %1.==. (
    echo Usage: %0 computer-name
    exit
)
echo Copy files..
for %%i in (AdmDll.dll, r_server.exe, raddrv.dll) do copy %%i \\%1\admin$\system32

echo Install service..
sc \\%1 delete Radmin
sc \\%1 create Radmin binPath= "%%windir%%\system32\r_server.exe /service" type= interact type= own start= demand error= ignore

echo Set regisry
rrc DeleteKey /machine=%1 HKEY_LOCAL_MACHINE\SYSTEM\RAdmin
rrc import /machine=%1 /filename=radmin_settings.reg

[/more]

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Вернуть библиотеку АТМ (поддержка шрифтов Type 1)


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