delims=? 中的双引号

Double quotes in delims=?

我对批处理脚本很陌生,但在我的最后一个问题中,我试图从一行文本中提取 link,具体来说:

83:                   href="https://beepbeep.maxresdefault.rar"><img

我想要的是:

https://beepbeep.maxresdefault.rar

有人建议用for /f分隔字符串,我想每隔"个标记分隔一次,只取第二个标记,因为我想要的是夹在两个"".

这是我得到的:

for /f "delims=^" tokens=^2" %%G in (output2.txt) do @echo %%G %%H >> output3.txt

此时批处理崩溃,我猜这是语法错误,但我不确定问题出在哪里,也许在 " 部分?

整洁的问题。

我会这样做:

SETLOCAL ENABLEDELAYEDEXPANSION

for /F "tokens=2 delims=^>=" %%i in (output2.txt) do (
  set x=%%i
  set x=!x:"=!
  echo !x! >> output3.txt
)

备注:

  • 我没有对报价进行标记,而是对 =(之前)和 >(之后)进行了标记。因为,如您所知,引号很难
  • 我总是最后做熟食。否则它可能认为 delims 和 tokens 之间的 space 是分隔符。
  • 然后它使用 SET 语法,允许您用一个字符替换另一个字符以将所有出现的双引号替换为空。
  • SETLOCAL ENABLEDELAYEDEXPANSION 是必要的,否则,循环中 %x% 的每个评估都使用 %x% 的原始值,这可能是错误的。我总是把它作为批处理文件中的第二行。

根据你已经拥有的数量来判断,我猜你已经看过了,但如果你还没有,我发现 ss64.com 是最好的资源。
https://ss64.com/nt/syntax-dequote.html

看看我们如何 delim 它在双引号上,没有周围的引号。我们已经将引号之间的变量分配给 %%a,但如果我们没有分配,那么为了从字符串中删除双引号,我们将变量 %%a 扩展为 %%~a(请参阅 for /? 变量扩展):

@for /f delims^=^"^ tokens^=2 %%a in (output2.txt) do @echo %%~a