我目前有一个批处理文件的命令
for /F "skip=1 tokens=1 delims=\n" %i in (stats.txt) do echo %i
Run Code Online (Sandbox Code Playgroud)
stats.txt的内容是
Title = Subaru's Great Rehab Strategy
URL = http://dynasty-scans.com/chapters/subarus_great_rehab_strategy
Tags = Subaru x Tsukasa[|]Yuri[|]
No. of Pages = 3
Run Code Online (Sandbox Code Playgroud)
^注意:最后一行实际上是空白的
代码行的想法是返回第二行URL
.最终的目标是,我会在某种循环中运行这一行,通过一系列~12000 + stats.txt文件并将所有URL
行收集到一个文件中
但是当我运行命令时,我得到了这个
正如你所看到的那样,它跳过了第一行,但它正在切断n
输入dynasty
和输出最后3行的位置.
现在,如果我删除delims=\n
我得到相同的3行,但我没有得到空格之前的第一个字,这似乎表明价值delims
是什么将一条线分成"令牌"然后我只抓住第一个(和空间)必须是默认的)
当我进入记事本++时,打开查找和替换对话框,将搜索模式转为扩展并查找"\ r \n"我将被带到每一行的末尾,这就是为什么我选择delims
成为\n的假设整行一个令牌
所以我的问题是我怎样才能得到我的stats.txt文件的所有第二行?
所述for /f
循环已经把回车符和/或换行作为最终的线.无需将其指定为分隔符.随着delims=\n
你实际上是在说所有文字反斜线和字母n的应该被视为令牌的分隔符.如果你想要整条生产线,你想要的是什么"skip=1 delims="
.
出于习惯,当用for /f
循环读取文件的内容时,我发现usebackq
只有在文件名/路径包含空格或符号的情况下启用它才有用.这允许您引用文件名以防止这种潜在的背叛.
@echo off
setlocal
for /F "usebackq skip=1 delims=" %%I in ("stats.txt") do if not defined URL set "URL=%%~I"
echo %URL%
Run Code Online (Sandbox Code Playgroud)
放入上下文,使用它来读取名为stats.txt的许多文件并将URL输出到单个集合中,将整个内容包含在另一个for
循环中并启用延迟扩展.
@echo off
setlocal
>URLs.txt (
for /R %%N in ("*stats.txt") do (
for /F "usebackq skip=1 delims=" %%I in ("%%~fN") do (
if not defined URL set "URL=%%~I"
)
setlocal enabledelayedexpansion
echo(!URL!
endlocal
set "URL="
)
)
echo Done. The results are in URLs.txt.
Run Code Online (Sandbox Code Playgroud)
如果要从每行的开头删除"URL ="并仅保留地址,则可以尝试将for /F
参数更改为"usebackq skip=1 tokens=3"
如果所有文件都遵循相同的格式URL
Space=
Spacehttp://etc.
.如果您不能依赖它,或者任何URL可能包含未编码的空格,您也可以更改echo(!URL!
为echo(!URL:*http=http!
归档时间: |
|
查看次数: |
695 次 |
最近记录: |