2

Я пытаюсь использовать файл .bat в качестве обработчика протокола. Например, URL-адрес протокола testapp://close и я настроил протокол для запуска "C:\test.bat" "%1" в реестре.

Файл test.bat

@echo off
echo %1
pause
exit 0

По сути, я хочу просто передать параметр в URL-адресе close с каким-либо приложением, чтобы выполнить C:/someapp.exe close однако параметр %1 я получаю, - это полный URL testapp://close/ . Как я могу разобрать параметр close из переменной %1 используя только собственные команды Windows?

1 ответ1

2

Вы можете использовать цикл FOR /F а с опциями "TOKENS=2 DELIMS=/" вы можете получить значение из строки URL, переданной в качестве первого аргумента при выполнении пакетного скрипта после его (значение URL) второй прямой косой черты (/) но перед следующей косой чертой (/), которая даст вам ожидаемый результат в точности так, как вы описываете, что вам нужно от этой части URL.

Вы можете SET разобранную URL строку в качестве значения переменного и использовать его для передачи в качестве первого аргумента в файл приложение исполняемого. Ниже я приведу несколько примеров пакетных сценариев, чтобы прояснить ситуацию.


# 1. Пакетный скрипт

@echo off
echo %~1
FOR /F "TOKENS=2 DELIMS=/" %%A IN ("%~1") DO (SET "var=%%~A")
echo %var%
pause
exit 0

# 2. Пакетный скрипт

@ECHO OFF
FOR /F "TOKENS=2 DELIMS=/" %%A IN ("%~1") DO (CALL C:/someapp.exe "%%~A")
EXIT 0

# 1. Коррелированные выходные результаты

C:\Users\User\Desktop> test.bat "testapp://close/"
testapp://close/
close
Press any key to continue . . .


Дополнительные ресурсы

  • FOR /F
  • FOR /?

        delims=xxx      - specifies a delimiter set.  This replaces the
                          default delimiter set of space and tab.
        tokens=x,y,m-n  - specifies which tokens from each line are to
                          be passed to the for body for each iteration.
                          This will cause additional variable names to
                          be allocated.  The m-n form is a range,
                          specifying the mth through the nth tokens.  If
                          the last character in the tokens= string is an
                          asterisk, then an additional variable is
                          allocated and receives the remaining text on
                          the line after the last token parsed.
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .