阅读批量

时间:2017-04-19 17:35:15

标签: batch-file url steam

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

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

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

URL=steam://rungameid/248390

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

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

2 个答案:

答案 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=命令的tokensdelims选项来拆分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所期望的内容。