到目前为止,我有这段代码(以Craft The World为例):
type "Craft The World.url"|find "URL"
如果我在cmd中运行它会输出:
URL=steam://rungameid/248390
如何将其保存到变量中?我试过了SET A=...
,但它没有用......
我的目标是从中提取ID(最后6个字符),但是一旦我有变量,我就可以在bat中进行子串。
答案 0 :(得分:2)
无需使用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"
)
上述方法都通过使用URL=
命令的tokens
和delims
选项来拆分for /F
前缀。
使用字符串URL=steam://rungameid/248390
,您可以滥用for
变量引用%%J
的{{3}}:
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:\\rungameid\248390
,其中最后一个路径元素由{0}提取{1}}和~n
修饰符。其他路径修饰符不会返回任何有用的内容,因为只有在~x
但/
没有\
时才会生效。
答案 1 :(得分:1)
使用for
循环来获得您想要的内容:
for /f %%i in ('type "Craft The World.url"^|find "URL"') do (
set "A=%%i"
)
考虑到如果输出包含多行,您将无法获得A
所期望的内容。