Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453

Создание системной переменной если её нет и удаление если есть (setenv)

09.11.2016, 16:24. Показов 3797. Ответов 14

Студворк — интернет-сервис помощи студентам
Нужен своеобразный переключатель определенной системной переменной с помощью утилиты setenv.
Суть его работы:
Если переменная VAR существует - удалить её
Если не существует - создать со значением 42.

Пробую так:
Windows Batch file
1
2
3
4
@echo off
setlocal enableextensions
 
if "setenv -u var"==1 (setenv -u var -delete) else (setenv -u var 42)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.11.2016, 16:24
Ответы с готовыми решениями:

Тригер, проверяющ. есть ли такой ID и если есть обновляющий его, если нет - добавляющий
Сабж. В MSSQL нуб. Есть ситуация. Добавляю товар из каталога поставщика в каталог магазина. Может быть такое, что мы заказываем...

Если в диапазоне есть время больше указанного,то 500,если нет - 0
Вопрос связан с расчетом зарплаты. Есть отдельно табель учета времени прихода/ухода, на сколько опоздал и тд. Нужно, чтобы если человек...

Если строки с такой записью нет - создать, если есть - обновить
Приветствую всех местных жителей! В очередной раз у меня не получается правильно сформировать SQL запрос: SqlCommand command = new...

14
 Аватар для vavun
10593 / 5556 / 865
Регистрация: 07.04.2013
Сообщений: 15,660
09.11.2016, 17:11
Windows Batch file
1
2
3
@echo off
if defined VAR setenv -u VAR -delete & exit /b
if not defined VAR setenv -u VAR 42 & exit /b
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
09.11.2016, 17:16  [ТС]
Не срабатывает условие "if defined VAR"
0
 Аватар для vavun
10593 / 5556 / 865
Регистрация: 07.04.2013
Сообщений: 15,660
09.11.2016, 17:19
Цитата Сообщение от MrGluck Посмотреть сообщение
Не срабатывает условие "if defined VAR"
Срабатывает


Я убрал кавычки в предыдущем сообщении, не знаю с кавычками вы пробовали или нет, но пробуйте без них
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
09.11.2016, 17:21  [ТС]
Цитата Сообщение от vavun Посмотреть сообщение
Срабатывает
Так мне надо проверить на существование системной переменной (типо PATH/TMP), для этого setenv и использую.
0
 Аватар для vavun
10593 / 5556 / 865
Регистрация: 07.04.2013
Сообщений: 15,660
09.11.2016, 17:25
Цитата Сообщение от MrGluck Посмотреть сообщение
надо проверить на существование системной переменной
Точно так же и проверяется.
Пробуйте перезапустить командную строку после применения переменной с помощью setenv
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
09.11.2016, 17:26  [ТС]
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
09.11.2016, 17:27  [ТС]
Цитата Сообщение от vavun Посмотреть сообщение
Пробуйте перезапустить командную строку после применения переменной с помощью setenv
Пробовал
0
 Аватар для vavun
10593 / 5556 / 865
Регистрация: 07.04.2013
Сообщений: 15,660
09.11.2016, 17:30
Стоп.
Setenv добавляет переменную в path что ли ?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
09.11.2016, 17:49  [ТС]
Цитата Сообщение от vavun Посмотреть сообщение
Setenv добавляет переменную в path что ли ?
Нет, в Environment variables (то, что еще правится через Панель управления -> Edit environment variables for your account)

Добавлено через 4 минуты
Решил использовать по рекомендации из этой темы:
Как уже было сказано выше, действие переменных, заданных командой set, ограничивается текущей командной сессией. Если вы хотите получить из временной переменной системную или пользовательскую, то надо ее прописать в реестр. Сделать это тоже можно различными способами.

Утилита setenv
0
 Аватар для vavun
10593 / 5556 / 865
Регистрация: 07.04.2013
Сообщений: 15,660
09.11.2016, 17:55
Цитата Сообщение от Dragokas Посмотреть сообщение
Утилита удобна тем, что после задания переменной ею можно пользоваться сразу. Ну почти сразу - в следующей командной сессии
Цитата Сообщение от Dragokas Посмотреть сообщение
Чтобы использовать ее в текущей сессии, можно задействовать старую знакомую команду set:
Как то так
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
09.11.2016, 18:13  [ТС]
Не знаю, к чему это.
У меня единственная проблема, что я не могу подставить результат вызова куда-нибудь в переменную или сразу в условие.
Вот так я могу получить результат:
Windows Batch file
1
2
3
setenv -u var >> 1.txt
set var =<1.txt
echo %var%
Допустим даже так: переменная уже задана. Как мне проверить её наличие в if?
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
09.11.2016, 20:24
Цитата Сообщение от MrGluck Посмотреть сообщение
Нужен своеобразный переключатель определенной системной переменной с помощью утилиты setenv.
Суть его работы:
Если переменная VAR существует - удалить её
Если не существует - создать со значением 42.
var_set.bat:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
>nul 2>&1 net session&&goto run
if /i "%~1"=="yes" goto run
>"%temp%\uac.vbs" echo set objShell=CreateObject^("Shell.Application"^)
>> "%temp%\uac.vbs" echo objShell.ShellExecute "%~0", "yes", , "runas", 1
"%temp%\uac.vbs"
exit /b
 
:run
del "%temp%\uac.vbs"
echo Successfull! UAC unlock
pause
 
if defined var (
    echo Удаляем var=%var%
    setx var "" /m 
) else (
    echo Устанавливаем var=42
    setx var 42 /m 
)
pause&exit
var_verify.bat:
Windows Batch file
1
2
3
@echo off
set va
pause
Цитата Сообщение от MrGluck Посмотреть сообщение
единственная проблема, что я не могу подставить результат вызова куда-нибудь в переменную или сразу в условие.
В текущей сессии консоли? Изменение системной переменной ничего не даст. Она будет работать только в следующей сессии...

А в текущей:
Цитата Сообщение от MrGluck Посмотреть сообщение
Как мне проверить её наличие в if?
Windows Batch file
1
2
3
4
5
set /a var=1+1
if defined var (echo Yes!) else (echo No!)
set "var="
if defined var (echo Yes!) else (echo No!)
pause
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
10.11.2016, 10:58  [ТС]
Лучший ответ Сообщение было отмечено vavun как решение

Решение

Итог:
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
if defined ESD (
    setenv -u VAR -delete
    set ESD=
) else (
    setenv -u VAR 42
    set ESD=ON
)
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
10.11.2016, 12:02
Цитата Сообщение от MrGluck Посмотреть сообщение
Итог
При таком итоге, всегда будет устанавливаться системная переменная VAR со значением 42 и она никогда не будет удалена, т.к. при запуске сценария переменной ESD ещё не существует, в принципе.
Если повторно запускать этот сценарий в пределах одной и той же сессии консоли, тогда системная переменная может быть удалена.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.11.2016, 12:02
Помогаю со студенческими работами здесь

Одним запросом, если есть таблица то удалить, если нет то создать
Доброго времени суток, а нет ли возможности одним запросом проверить, если есть таблица то удалить, а если нет то создать?

триггеры на проверку если запись есть то пропустить если нет то добавить...
есть триггер но он работает только при добавлении одной записи.... мне нужно что бы он просматривал все....заранее благодарен)))) Alter ...

Если в txt есть строка, то сделай это, если нет то это2
Доброго времени суток. Пытаюсь сделать такое: if find &quot;11.0.1.90&quot;&lt;&quot;C:\Program Files (x86)\Kaspersky Lab\Kaspersky Endpoint Security for...

Обновить если запись есть; Создать если записи нет
Ребят подскажите как оптимизировать программу, ибо занимает очень много времени на обработку.Программа делает следующее - ищет на сайте...

Запрос: если записи нет - добавить, если есть - обновить
Здравствуйте. Помогите составить запрос, который будет добавлять запись в таблицу, если ее там нет и обновлять несколько полей, если есть.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru