繁体   English   中英

delims中的双引号=?

[英]Double quotes in delims=?

我对批处理脚本很陌生,但在我的最后一个问题中,我试图从一行文本中提取一个链接,特别是:

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。 否则它可能会认为分隔符和标记之间的空间是分隔符。
  • 然后它使用SET语法,允许您用一个字符替换另一个字符,以将所有出现的双引号替换为空。
  • SETLOCAL ENABLEDELAYEDEXPANSION是必要的,因为否则,循环中%x%的每次评估都使用 %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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM