批量读取在线url-link(.url)

Read url of online-link(.url) with batch

到目前为止我有这个代码(以 Craft The World 为例):

type "Craft The World.url"|find "URL"

如果我在 cmd 中 运行 它输出:

URL=steam://rungameid/248390

如何将其保存到变量中?我试过 SET A=... 但没用...

我的目标是从中提取 ID(最后 6 个字符),但是一旦我有了变量,我就可以在 bat 中添加子字符串。

使用 for 循环得到你想要的:

for /f %%i in ('type "Craft The World.url"^|find "URL"') do (
    set "A=%%i"
)

请注意,如果输出包含多行,您将不会得到 A 您期望的结果。

不需要使用type命令;使用 input redirection (<) 读取文件并将其传递给 find 命令。

要捕获命令行标准输出的最后一行并将其存储到变量 (LINE) 中,请使用 for /F loop:

for /F "tokens=1* delims== eol=" %%I in ('^< "Craft The World.url" find "URL"') do set "LINE=%%J"
echo Last line: "%LINE%"

要处理多行输出,请在循环体内执行此操作,直接使用 for 变量引用 %%J

for /F "tokens=1* delims== eol==" %%I in ('^< "Craft The World.url" find "URL"') do (
    echo Line string: "%%J"
)

上述方法都通过使用 for /F 命令的 tokensdelims 选项来拆分 URL= 前缀。


使用字符串 URL=steam://rungameid/248390,您可能会误用 for 变量引用 %%J:

~ modifies
for /F "tokens=1* delims== eol=" %%I in ('^< "Craft The World.url" find "URL"') do (
    echo Line string : "%%J"
    echo Last element: "%%~nxJ"
)

这是可行的,因为 / 转换为标准路径分隔符 \,因此 steam://rungameid/248390 在内部变为 steam:\rungameid8390,最后一个路径元素由~n~x 修饰符。其他路径修饰符 return 没有任何用处,因为它们仅在没有 / 而只有 \ 出现时才可靠。