Параметр протокола анализа (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.