Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/104: Рейтинг темы: голосов - 104, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 24.09.2015
Сообщений: 8

Неработающее условие «if "%1"==""» в bat-файле

24.09.2015, 18:28. Показов 19721. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Собственно сабж: .bat не запускается, ссылаясь на ошибку в синтаксисе. Если убрать первый if, то всё работает. Сверял с принятым синтаксисом - не вижу проблемы. Вот сам код. Требовалось написать калькулятор для запуска из командной строки.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@echo off
if "%1"=="" (
:WriteAgain
set x= 
set /p variables=Write your expression 
if "%variables%"=="help" (
echo Use arithmetical operations and numbers without spaces. + for sum, * for multiplication, / for 
 
devision, - for subtraction 
exit
)
set variables=%variables: =%
set /a x=%Variables% 2>Error.txt
if %errorlevel% neq 0 goto ErrorOccured
echo %x% 
pause
exit
:ErrorOccured
echo Your expression is not valid 
goto WriteAgain
) else (
set variables=%*
set variables=%variables: =%
set /a x=%variables% 2>Error.txt
if %errorlevel% neq 0 goto ErrorOccured
echo %x%
)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2015, 18:28
Ответы с готовыми решениями:

Условие в Bat-файле
Здравствуйте! Возможно ли написать код в bat-файле, который создаст условие - не открывать файл 2, если не открылся файл 1? Проще говоря,...

Как вызвать в одном bat-файле другой bat-файл?
Здравствуйте, уважаемые форумчане. Подскажите, пожалуйста, каким образом надо прописать в одном bat-файле вызов другого bat-файла? ...

Можно ли получить имя bat-файла в этом же bat-файле?
Запускаю прогу со входными аргументами из батника. Последний аргумент - имя выходного файла. Хочу чтобы это имя было таким же, как и у...

1
 Аватар для ComSpec
3463 / 2001 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
28.09.2015, 02:24
Лучший ответ Сообщение было отмечено Paul_was_taken как решение

Решение

Цитата Сообщение от Paul_was_taken Посмотреть сообщение
Собственно сабж: .bat не запускается, ссылаясь на ошибку в синтаксисе. Если убрать первый if, то всё работает. Сверял с принятым синтаксисом - не вижу проблемы.


Я вижу проблему. У Вас все переменные раскрываются в блоках, заключённых в скобки. В этом случае необходимо использовать в начале кода команду "SETLOCAL ENABLEDELAYEDEXPANSION" и в качестве символа расширения переменной применять не символ процента, а восклицательный знак. Да и переходы по метке, находящейся в одном блоке, из другого блока невозможны.




Цитата Сообщение от Paul_was_taken Посмотреть сообщение
Требовалось написать калькулятор для запуска из командной строки.


Хотел было исправить Вам код согласно изложенным мной принципам, но увидев и другие недочёты, написал свой код по "мотивам" Вашего:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
@echo off
 
if "%~1"=="" (goto 1) else (goto 2)
 
:1
 set expression=
 set /p "expression=Write your expression: "
 call :operation "%expression%"
 if %errorlevel% neq 0 (
  call :error
  echo.
  goto 1
 )
 echo.
 exit /b
 
:2
 if "%~1" equ "help" (
  call :%~1
  exit /b
 )
 call :operation %*
 if %errorlevel% neq 0 (
  call :error
  exit /b
 )
 echo.
 exit /b
 
:operation
 cmd /c set /a %* 2>nul
 goto :eof
 
:error
 echo Your expression is not valid.
 goto :eof
 
:help
 echo Use arithmetical operators and numbers with or without spaces.
 echo + for sum, * for multiplication, / for devision, - for subtraction.
 goto :eof
.

Обошёлся даже без переменной "x", так как команда "CMD /C SET /A" сразу выводит результат вычисления выражения без задания переменной.




Цитата Сообщение от Paul_was_taken Посмотреть сообщение
echo Use arithmetical operations and numbers without spaces.


Код будет работать и с выражениями, содержащими пробелы (например,
123 * 321
),
а в случае ручного ввода выражения и с операторами
()
<<
>>
&
^
|
.

Если Вы хотите использовать эти операторы в выражении, являющимся параметром при запуске пакетного файла, то заключайте такое выражение в кавычки (например,
"1 | 2"
).
При ручном вводе заключать выражение в кавычки нельзя.

Пакетный файл также может работать и при запуске из проводника в режиме ручного ввода данных, только впишите после четырнадцатой строки "pause".
4
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.09.2015, 02:24
Помогаю со студенческими работами здесь

Вызов одного bat в другом bat файле несколько раз
Доброго времени суток. Подскажите: есть два бат-файла, установлена система radius, приходят архивы. Распишу бат файлы: в первом - :1 if...

Как экранировать кавычки в bat файле или же создать .bat для создания ярлыков?
Нужно размножить ярлыки с разными параметрами запуска(профиля для chrome) у меня не получается кавычки экранировать в бат файле Вот...

Выполнение условия в bat файле по наличию текста в определённом файле
Задача: найти опеределённую строчку текста в файле и если она совпадает с искомой, то выполнить goto metka в bat файле, иначе goto metka2 ...

Адаптация и неработающее меню
Рад вас приветствовать, уважаемые профессионалы! В веб разработке новичок, сделал сайт (самописный), но адаптировать под мобильники, либо...

В ярлыках браузеров emorhc.bat rehcnual.bat xoferif.bat erolpxei.bat
В ярлыках браузеров встроились вирусы и при открытии открывается реклама


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru