我正在尝试使用 .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.