Как превратить несколько параметров в один параметр в пакетном режиме? - PullRequest
0 голосов
/ 21 мая 2018

Эту тему действительно сложно объяснить, поэтому постарайтесь понять ее. Я работаю над проектом под названием RoSOX, который использует URI для присоединения к серверу (на другом конце). Однако эта пакетная программатребуется минимум 3 параметра.Если бы вы запускали его из командной строки Windows, вы бы запустили его так: RoSOXLauncher.bat "IPHere" "PortHere" "UsernameHere" .Это код, который получает эти значения (но не всю программу)

@echo off
set ip=%~1
set port=%~2
set username=%~3

К сожалению, я обнаружил еще одну публикацию, в которой упоминается протокол URI (записи реестра, позволяющие запускать программу из вашего веб-браузера, например:« mailto: example@example.com») принимает только 1 параметр независимо от программы.Моя теория, чтобы обойти это, состоит в том, чтобы ввод был соединен запятыми, поэтому он считается одним параметром.Это будет написано так: RoSOXLauncher.bat IPHere , PortHere , UsernameHere Примером может быть this. Логарифм будет

  • Разобрать значения из запятых (вероятно, используется команда FOR)
  • Взять каждое значение и поместить его в собственную переменную
  • Продолжить оставшуюся часть сценария

Кто-нибудь знает, как этот логарифм будет записан в пакетном режиме?Это единственное, что мешает мне правильно запустить мою программу.

1 Ответ

0 голосов
/ 21 мая 2018

Кажется очень неясным, что вы хотите, но если я правильно понимаю ваше требование, то:

@echo off
set ip=%~1
set port=%~2
set username=%~3

Все равно будет работать, если вы выполните:

RoSOXLauncher.bat IPHere,PortHere,UsernameHere

Просто потому, чтокроме разделителей: whitespace, запятая и точка с запятой.Вы можете попробовать это и убедиться сами.

RoSOXLauncher.bat IPHere;PortHere;UsernameHere
RoSOXLauncher.bat IPHere PortHere UsernameHere

сделает то же самое.

С другой стороны, ваша программа, из которой вы отправляете параметры, может также разделять пробелами, командами илиточка с запятой, тогда вы можете просто использовать другой общий разделитель, такой как - или :, посмотрите это:

@echo off
for /f "tokens=1-3 delims=-" %%i in ("%~1") do (
  echo ip %%i
  echo port %%j
  echo username %%k
)

Который вы можете запустить, используя:

RoSOXLauncher.bat IPHere-PortHere-UsernameHere

или

@echo off
for /f "tokens=1-3 delims=:" %%i in ("%~1") do (
  echo ip %%i
  echo port %%j
  echo username %%k
)

, с которыми вы можете запустить:

RoSOXLauncher.bat IPHere:PortHere:UsernameHere
...