【发布时间】:2019-10-15 07:46:53
【问题描述】:
我试图在一些文件中获取几行并将它们存储在变量中(line3 和 line4)。
这是代码:
setlocal EnableDelayedExpansion
for /f "tokens=*" %%a in ('dir *.md /b /o:-n /a:-d') do (
call :getLines "%%a"
)
pause
exit
:getLines
set /A cnt=2
for /f "skip=4 tokens=*" %%b in (%1) do (
set /A cnt+=1
set "line!cnt!=%%b"
if !cnt! == 4 (
set "filename=%~n1"
set "blogdate=!filename:~0,10!"
set "blogtitle=!filename:~11!"
echo hello
echo !line3!
echo !line4!
echo !filename!
echo !blogdate!
echo !blogtitle!
)
)
goto :eof
以上内容甚至不会回显hello。我看不出有什么问题。
这是每个文件的样子:
# Title
*2015-11-17*
Tags: word1 word2
First Sentence is here.
文件名如下所示:
2015-11-17-title.md
【问题讨论】:
-
您是否尝试过将
echo cnt is !cnt!放在 if 语句之前? -
这就是我在这里的原因。
-
您应该在这些迭代中使用反引号,因为您负责任地双引号传递的参数,即
For /F "UseBackQ Skip=4 Tokens=*" %%b In (%1) Do ( -
此外,您提供的示例
.md内容显示了您的Title在线1和预期的新文件 BaseName 斜体在线3,在标准For /F循环中将为2行,因为空行不被处理。事实上,如果您skip第一行4行,您提供的所有内容都将被跳过。您能否准确说明您希望将哪些行保存到变量中,以及您问题中的文件内容是否是实际文件的真实表示。实际任务的概述,而不是您希望发布的代码做什么,也可以帮助我们为您提供帮助。 -
是的,我知道 for 循环会忽略空行,但跳过选项不会。现在运行良好。
标签: loops for-loop batch-file if-statement