Пакетная команда IF не выполняется - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь получить пару строк в некоторых файлах и сохранить их в переменных (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

1 Ответ

0 голосов
/ 15 октября 2019

Вы перешли к вызову с кавычками, поэтому вы должны сначала удалить его (или использовать usebackq).
Также, когда вы тестируете, пока не используйте exit.
Попробуйте, посмотрите,это работает:
(отформатирован, чтобы структура была более понятной, попробуйте комментарий @echo off, чтобы получить более подробную информацию.)

@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 примет ввод с кавычками в виде строки, а не файла.
%~1 удалит кавычки %1.
Проверьте for /? и call /? для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...