首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双引号在delims=?

双引号在delims=?
EN

Stack Overflow用户
提问于 2019-11-15 02:09:44
回答 2查看 457关注 0票数 3

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

代码语言:javascript
复制
83:                   href="https://beepbeep.maxresdefault.rar"><img

我想要的是:

代码语言:javascript
复制
https://beepbeep.maxresdefault.rar

有人建议使用for /f来分隔字符串,我希望将它分隔为每个"标记,只取第二个标记,因为我想要的是两个""之间。

以下是我所得到的:

代码语言:javascript
复制
for /f "delims=^" tokens=^2" %%G in (output2.txt) do @echo %%G %%H >> output3.txt

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-15 05:54:15

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

代码语言:javascript
复制
@for /f delims^=^"^ tokens^=2 %%a in (output2.txt) do @echo %%~a
票数 3
EN

Stack Overflow用户

发布于 2019-11-15 03:06:31

整洁的问题。

我会这样做的:

代码语言:javascript
复制
SETLOCAL ENABLEDELAYEDEXPANSION

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

备注:

  • 没有对报价进行标记,而是在= (前)和> (后)上进行标记。因为,正如您已经知道的,引号是很难的,

  • ,我总是做最后的分隔。否则,它可能会认为分隔符和标记之间的空格是一个delimeter.
  • Then,它使用SET语法,允许您用一个字符代替另一个字符来替换所有出现的双引号。
  • SETLOCAL ENABLEDELAYEDEXPANSION是必要的,因为否则,循环中的%x%的每个计算都使用了%x%的原始值,这可能是错误的。我总是把它作为批处理文件中的第二行。

从您已经拥有的数量来判断,我猜您已经看到了,但是如果没有,我发现ss64.com是最好的资源。

https://ss64.com/nt/syntax-dequote.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58869362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档