Войти

Показать полную графическую версию : Составить скрипт с условием


Страниц : [1] 2

Firebolt
10-07-2009, 10:19
Вот такой вот пишу скрипт:

@ echo off IF NOT EXIST %windir%\logo2.bmp (
REGEDIT /S \\svrmain\prog\logonwp.reg
copy /Y \\svrmain\prog\logo2.bmp %windir%
) ELSE (
exit
)

Тут все работает, но нужно добавить нюанс. Что-то типа условия в условии. Если словами, то... Когда файл logo2 не найден, то добавить такое-то измение реестра... А потом еще одно условие: если изменение не было внесено в реестр, тогда goto end - пропускаем копирование файла logo2. Вот как это условие записать про изменения в реестре?

Petya V4sechkin
10-07-2009, 10:45
Firebolt, с помощью Reg Query можно проверить (внесено ли изменение), как-то так:
REG QUERY "раздел" /V "параметр" && copy /Y \\svrmain\prog\logo2.bmp %windir%
Оператор && выполняет следующую команду в том случае, если предыдущая завершилась успешно.

Firebolt
10-07-2009, 11:08
Petya V4sechkin, а почему REG QUERY? Можно мне вставить туда же в

REGEDIT /S \\svrmain\prog\logonwp.reg
copy /Y \\svrmain\prog\logo2.bmp %windir%

&& ? Чтобы получилось

REGEDIT /S \\svrmain\prog\logonwp.reg &&
copy /Y \\svrmain\prog\logo2.bmp %windir% ???

Petya V4sechkin
10-07-2009, 11:18
Firebolt, потому что Regedit не возвращает ошибок (ErrorLevel = 0).
После && не должно быть перевода строки (обе команды в одной строке).

Firebolt
10-07-2009, 21:48
Petya V4sechkin, чего только не пробовал, не получается у меня изменения внести в реестр. Может поможете мне? Применяю следующий твик:

"Wallpaper"="C:\\Windows\\logo2.bmp"
"WallpaperStyle"="2"
"OriginalWallpaper"="C:\\Windows\\logo2.bmp"

Petya V4sechkin
10-07-2009, 22:05
Firebolt, прям так и применяете?
Почему бы в нормальном виде не сделать?
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Control Panel\Desktop]
"Wallpaper"="C:\\Windows\\logo2.bmp"
"WallpaperStyle"="2"
"OriginalWallpaper"="C:\\Windows\\logo2.bmp"

Firebolt
10-07-2009, 22:10
Petya V4sechkin, потому что мне необходимо условие - если изменения не вносятся, тогда скрипт не должен отрабатывать дальше. А если вносятся, тогда скрпит работает дальше и копирует файл. Этот файл в последствии является маркером. И при повторном запуске, если этот файл уже имеется в наличии, скрипт вообще не будет отрабатываться. Весь этот скрипт прописан в групповой политеке и запускается каждый раз при логоне пользователя. Взглянув на пример, приведенный в первом посте, вы поймете о чем я говорю. И тот пример работает уже. Но нужно поправить один нюанс, как я писал выше.

Petya V4sechkin
10-07-2009, 22:15
Firebolt, фрагмент из 5-го поста не похож на фрагмент из 6-го.
Вы пишете:
не получается у меня изменения внести в реестр.
А я вам отвечаю, что твик из 6-го поста вносит изменения.

Firebolt
10-07-2009, 22:20
Petya V4sechkin, у меня не получается внести изменения в реестр при помощи команды REG QUERY из командной строки! Да, мой 5 пост предполагал, что вы помните, о чем идет речь. Прошу прощения, не подумал.

В общем, я хочу внести вот эти вот изменения в реестр

[HKEY_CURRENT_USER\Control Panel\Desktop]
"Wallpaper"="C:\\Windows\\logo2.bmp"
"WallpaperStyle"="2"
"OriginalWallpaper"="C:\\Windows\\logo2.bmp"

из коммандной строки, для того чтобы получить этот самый ErrorLevel, который даст мне возможность использовать оператор &&.

Petya V4sechkin
11-07-2009, 10:07
у меня не получается внести изменения в реестр при помощи команды REG QUERY из командной строки!
Команда REG QUERY для этого не предназначена.

если изменения не вносятся, тогда скрипт не должен отрабатывать дальше. А если вносятся, тогда скрпит работает дальше и копирует файл.
Вернемся к началу.
Вы говорите, что REGEDIT /S файл.reg не вносит изменения в раздел "HKCU\Control Panel\Desktop", интересно, по какой причине? Разрешения изменены, что ли?

Firebolt
11-07-2009, 10:14
Petya V4sechkin, Вы говорите, что REGEDIT /S файл.reg не вносит изменения в раздел "HKCU\Control Panel\Desktop", интересно, по какой причине? Разрешения изменены, что ли? »

Ну вообще, да, пользователь имеет ограниченные групповой политикой права. Но если локально он является администратором, то все изменения вносятся. По идее, если задуматься, то получается, не имеет значения, есть ли у него права администратора локально или нет. Ведь даже если он локально и админ, то он все равно не может вносить изменения в реестр согласно групповой политике. Но вот появились подозрения, что если пользователь не имеет локально прав администратора, то при логоне изменения не вносятся. И мне сказали написать скрипт с вот таким условием, о котором я говорил выше.

Petya V4sechkin
11-07-2009, 10:24
Но вот появились подозрения, что если пользователь не имеет локально прав администратора, то при логоне изменения не вносятся.
Команда:
copy /Y \\svrmain\prog\logo2.bmp %windir%
не работает, потому что обычный пользователь не имеет прав на запись в папку %windir%

Еще непонятно, почему вы используете логон-скрипт, ведь для установки обоев существует отдельная политика.

Firebolt
11-07-2009, 14:41
Petya V4sechkin, не работает, потому что обычный пользователь не имеет прав на запись в папку %windir% »

Ну так это здорово!!! Вот мне и нужно, чтобы было вообще исключено, что эта картинка, этот файл копировался, если у пользователя нету прав на изменение реестра. Блин, ну и тупик!

Пожалуйста, просто скажите мне, как создать из командной строки в ветке реестра HKU\.DEFAULT\Control Panel\Desktop параметры
"Wallpaper"="C:\\Windows\\logo2.bmp"
"WallpaperStyle"="2"
"OriginalWallpaper"="C:\\Windows\\logo2.bmp"

Я REG ADD колбашу, но ниче не выходит. По умолчанию в ХР параметры эти все есть, просто надо дать из значения. А у меня вообще никак не получается.

Вот это вот запускаю для примера
REG ADD HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v Fignya /t REG_SZ /d D:\fignya.exe
но ничего не изменется.

Petya V4sechkin
11-07-2009, 15:24
Весь этот скрипт прописан в групповой политеке и запускается каждый раз при логоне пользователя.
Стесняюсь спросить, а вы уверены, что это политика для пользователей, а не для компьютеров?

Firebolt
11-07-2009, 15:42
Petya V4sechkin, вот тут все видно

sov44
12-07-2011, 21:14
Не могу понять, почему не выполняется условие по выбору задания внутри условия. (кусок скрипта)

@echo off
Echo Выберите задание:
Echo.
if exist "c:\Program Files\Winrar\WinRAR.exe" (
echo 1 - установка обновлений Office 2010
echo 2 - создание самораспаковывающегося архива Office 2010
echo 3 - выход из скрипта
echo.
Set /p choice=Ваш выбор:
if "%choice%"=="1" (ping 127.0.0.1 -n 3 > nul &start Inst.cmd &&goto n2)
if "%choice%"=="2" (ping 127.0.0.1 -n 3 > nul &&goto n1)
if "%choice%"=="3" (ping 127.0.0.1 -n 3 > nul &&goto n2)

:n1
Echo.
Set /p instdate=Введите дату сборки:
...
...
)
exit
) else (
echo 1 - установка обновлений Office 2010
echo 2 - выход из скрипта
echo.
Set /p choice=Ваш выбор:
if "%choice%"=="1" (ping 127.0.0.1 -n 3 > nul &start Inst.cmd &&goto n2)
if "%choice%"=="2" (ping 127.0.0.1 -n 3 > nul &&goto n2)
)

:n2
Echo.
Echo.
Echo Работа скрипта закончена.
Echo Окно командной строки закроется через некоторое время.
ping 127.0.0.1 -n 10 > nul
exit

Foreigner
12-07-2011, 21:42
sov44,
На первый взгляд ошибка в том, что переменная %choice% и присваивается и проверяется в одном скрипт-блоке "if". Пример:

@echo off

:: C отложенным расширение переменных среды
setlocal enabledelayedexpansion

if "1"=="1" (

set "var=test"
echo 1. var=%var%
echo 2. var=!var!

)

endlocal

:: Без отложенного расширения переменных среды
setlocal

if "1"=="1" (

set "var=test"
echo 3. var=%var%
echo 4. var=!var!

)

sov44
12-07-2011, 21:48
На первый взгляд ошибка в том, что переменная %choice% и присваивается и проверяется в одном скрипт-блоке "if" »
Возможно, но в этом суть проверки на наличие WinRar.

Foreigner
12-07-2011, 21:56
Возможно, но в этом суть проверки на наличие WinRar. »
И? Переделай и все будет тип-топ:

@echo off
setlocal enabledelayedexpansion

if exist "%programfiles%\winrar\winrar.exe" (

set /p choice="Бла-бла: "

if "!choice!"=="1" .....
if "!choice!"=="2" .....

)
....


PS. Для меню выбора лучше сразу определить значение по-умолчанию, либо при проверке введеного значения использовать if defined:

set /p choice=": "
if defined choice (

if "%choice%"=="1" ...

)

sov44
12-07-2011, 22:07
Foreigner, ушел от скобок, поменяв и добавив дополнительные пути перехода.
if exist "c:\Program Files\Winrar\WinRAR.exe" goto n1 else goto n4
задачка решена. :)




© OSzone.net 2001-2012