Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/29: Рейтинг темы: голосов - 29, средняя оценка - 4.86
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22

Как сослаться на конкретный аргумент командной строки через целочисленную переменную?

17.01.2020, 20:37. Показов 5914. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сослаться на i-ый аргумент командной строки через целочисленную переменную? Переменная определана так:
Windows Batch file
1
set /A i=0
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.01.2020, 20:37
Ответы с готовыми решениями:

Передача числа через аргумент командной строки
Здравствуйте. Мне необходимо передать число в программу, а затем работать с этим числом. Проблема состоит в том, что при...

Задача на соотношение заглавных/строчных букв в слове, переданном через аргумент командной строки
Здравствуйте, помогите пожалуйста с задачей, не могу придумать цикл: Разработать программу соотношения заглавных и строчных букв в...

Имя файла как аргумент командной строки
Здравствуйте! Программа получает имя файла как аргумент командной строки, причем при неправильной вводе или при отсутствии она должна...

14
 Аватар для b0gus
741 / 339 / 134
Регистрация: 17.03.2014
Сообщений: 841
17.01.2020, 21:24
Лучший ответ Сообщение было отмечено Соколиный глаз как решение

Решение

Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Как сослаться на i-ый аргумент командной строки через целочисленную переменную?
примерно так:
Windows Batch file
1
2
3
4
@echo off
set /A i=0
call echo:%%~%i%
pause
1
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
17.01.2020, 21:31  [ТС]
b0gus, извиняюсь за, возможно глупый вопрос, но что делает тильда?
0
 Аватар для b0gus
741 / 339 / 134
Регистрация: 17.03.2014
Сообщений: 841
17.01.2020, 21:47
Лучший ответ Сообщение было отмечено Соколиный глаз как решение

Решение

Цитата Сообщение от Соколиный глаз Посмотреть сообщение
что делает тильда?
приведу выдержку из help'а для командыFOR, т.к. для значений параметров применяются те же операции подстановки ссылок:
Цитата Сообщение от for /?
...
Операции подстановки ссылок на переменные команды FOR также расширены. Допускается применение следующих синтаксических конструкций:

%~I - из переменной %I удаляются обрамляющие кавычки (")
%~fI - переменная %I расширяется до полного имени файла
%~dI - из переменной %I выделяется только имя диска
%~pI - из переменной %I выделяется только путь к файлу
%~nI - из переменной %I выделяется только имя файла
%~xI - из переменной %I выделяется расширение имени файла
%~sI - полученный путь содержит только короткие имена
%~aI - переменная %I расширяется до атрибутов файла
%~tI - переменная %I расширяется до даты /времени файла
%~zI - переменная %I расширяется до размера файла
.....
При объединении нескольких операторов можно получить следующие результаты:

~dpI - переменная I раскрывается в имя диска и путь
~nxI - переменная I раскрывается в имя файла и его расширение
~fsI - переменная I раскрывается в полный путь с короткими именами
~ftzaI - переменная I раскрывается в строку, подобную выдаваемой командой DIR
...
т.е. в вашем случае - убрать окаймляющие кавычки из i-го параметра командной строки
1
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
18.01.2020, 10:53  [ТС]
b0gus, почему следующий код не работает:
Windows Batch file
1
echo %%~%i%
? Почему Вы использовали здесь call?
Цитата Сообщение от b0gus Посмотреть сообщение
call echo:
0
 Аватар для b0gus
741 / 339 / 134
Регистрация: 17.03.2014
Сообщений: 841
18.01.2020, 15:12
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Почему Вы использовали здесь call?
это связано с таким понятием интерпретатора cmd как расширение переменных среды, т.е. получения значения переменной, см.
Windows Batch file
1
setlocal /?
зы. How does the Windows Command Interpreter (CMD.EXE) parse scripts?
1
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
18.01.2020, 16:31  [ТС]
b0gus, понял. Но, как, например, в if проверять равенство i-ого аргумента командой строки какому-то значению? У меня следующий код не работает:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off
title Action
setlocal
 
set /A i=1
 
if %%~%i% EQU 1 (
    echo Second arg in equal to 1
)
 
endlocal
0
 Аватар для b0gus
741 / 339 / 134
Регистрация: 17.03.2014
Сообщений: 841
18.01.2020, 17:01
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
в if проверять равенство i-ого аргумента командой строки какому-то значению?
Windows Batch file
1
2
3
4
5
6
7
@echo off
set /A i=1
call set "arg=%%~%i%"
if "%arg%" EQU "1" (
  echo Second arg in equal to 1
)
pause
1
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
18.01.2020, 17:06  [ТС]
b0gus, а кавычки - зачем? Не понял.
0
 Аватар для b0gus
741 / 339 / 134
Регистрация: 17.03.2014
Сообщений: 841
18.01.2020, 17:23
Лучший ответ Сообщение было отмечено Соколиный глаз как решение

Решение

Цитата Сообщение от Соколиный глаз Посмотреть сообщение
а кавычки - зачем?
if сравнивает строки:
Цитата Сообщение от if /?
IF [NOT] строка1==строка2 команда
...
IF [/I] строка1 оператор_сравнения строка2 команда
а ежели при вызове скрипта параметра не будет, то аргумент примет значение "пусто" и
Windows Batch file
1
if %arg% EQU 1 (
превратится в
Windows Batch file
1
if EQU 1 (
и получится
Непредвиденное появление: 1.
1
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
18.01.2020, 17:38  [ТС]
b0gus, а кавычки после call set тогда что делают?
0
 Аватар для b0gus
741 / 339 / 134
Регистрация: 17.03.2014
Сообщений: 841
18.01.2020, 19:11
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
кавычки после call set тогда что делают?
гарантируют, что в значение переменной, устанавливаемой командой set, не замешается нечто непредвиденное, скажем - пробел или несколько:
Windows Batch file
1
2
3
4
@echo off
set par=value 
echo:par=[%par%]
pause
1
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
18.01.2020, 19:17  [ТС]
b0gus, а откуда здесь взялся пробел после value при выводе? Как понять, когда пробел добавится, а когда - нет? (Вы, случаем отвечать не устали?)
0
 Аватар для b0gus
741 / 339 / 134
Регистрация: 17.03.2014
Сообщений: 841
18.01.2020, 19:33
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
откуда здесь взялся пробел после value при выводе?
я _специально_ в примере его добавил, для демонстрации
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Как понять, когда пробел добавится, а когда - нет?
как вариант: по всем строкам скрипта "прыгать" в конец строки и вглядываться, но в такой конструкции и это не спасёт:
Windows Batch file
1
set arg=value &set RC=zero
остаётся - писать так:
Windows Batch file
1
set "arg=value"
1
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
18.01.2020, 19:40  [ТС]
b0gus, я его и не заметил. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.01.2020, 19:40
Помогаю со студенческими работами здесь

Возможно ли целочисленную переменную записать в файл как целочисленную, а не её символьное представление?
Возможно при помощи operator<< переменную типа int записать в файл как int, а не её символьное представление? речь идёт о сохранении в...

Как сделать, чтобы аргумент командной строки не экранировался
Команда "app.exe arg1\narg2" После получения аргумента , args = "arg1\\narg2"; Как все же добиться перевода текста на новую...

Как указать аргумент через переменную?
есть код: ShellExecute (NULL, L"open", L"C:\\Program Files\\1Cv77\\BIN\\1CV7.exe", L"enterprise /M /DC:\\cpp\\1s_auto_ms\\auto\\db...

Как ввести звездочку как аргумент командной строки?
Нужно написать польский калькулятор ( на вход подается выражение, записанное в обратной польской записи ). Решил сделать через аргументы...

Как получить ссылку на переменную через аргумент?
как сделать так чтоб функция изменяла переменную полученную из аргумента? function change(Variable){ Variable = 7 ; } var i...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru