tyee
tyee

Reputation: 331

Batch IF command not running

I'm trying to grab a couple of lines in some files and store them in variables (line3 and line4).
Here is the code:

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

The above will not even echo hello. I can't see what's wrong.
This is what each file looks like:

# Title

*2015-11-17*

Tags: word1 word2

First Sentence is here.

Filenames look like this:

2015-11-17-title.md

Upvotes: 0

Views: 42

Answers (1)

Tyl
Tyl

Reputation: 5252

You passed to call with quotes, so you should strip it first (or use usebackq).
Also when you are testing, don't use exit yet.
Try this, see if it works:
(Formatted so the structure is more clear, try comment @echo off to get more details.)

@echo off
setlocal EnableDelayedExpansion

for /f "tokens=*" %%a in ('dir *.md /b /o:-n /a:-d') do (
    call :getLines "%%a"
)

pause
::exit
goto :eof

:getLines
set /A cnt=2
for /f "usebackq 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
    )
)
goto :eof

for will take the input with quotes as string not as file.
%~1 will strip %1's quotes.
Check for /? and call /? for more details.

Upvotes: 1

Related Questions