Параметр протокола анализа (URL) в командном файле?

Я пытаюсь использовать файл.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 ответ

Решение

Вы можете использовать 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.
    
Другие вопросы по тегам