在批处理文件中解析协议参数(URL)?

在批处理文件中解析协议参数(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/。如何仅使用本机 Windows 命令从变量close中解析出参数?%1

答案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 . . .

在此处输入图片描述


更多资源

  • 为/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.
    

相关内容