#batch-file #markdown #extract
#пакетный файл #markdown #извлечение
Вопрос:
Это код из вызова над ним. Я извлекаю строку 5 из файла с этим кодом, который оставляет ее в %%c. Затем я хочу взять каждое слово в этой строке (может быть от 1 до n-го слова) и создать ссылку markdown, например
[word](word.html)
и добавьте их в текстовый файл. Это то, что у меня есть на данный момент. Если у меня есть 10 слов, действительно ли я должен добавлять все токены в команду, такие как %%d, %%e и т.д.? Могу ли я использовать что-то вроде tokens = 1-*. * что означает последний токен в строке? Использование токенов =* использует всю строку слов как один токен, я полагаю.
setlocal enabledelayedexpansion
set "lineNr=5"
set /a lineNr-=1
for /f "usebackq delims=" %%c in (`more !lineNr! "%~1"`) DO (
for /f "tokens=1-2 delims= " %%d in ("%%c") do (
echo [%%d]^(tags/%%d.html^) [%%e]^(tags/%%e.html^) ^<br^> >> index.txt
)
goto :eof
)
Комментарии:
1. нет, вам не нужно назначать каждую метапеременную.. Возьмите это в качестве примера:
2.
set "str=this is a 6 word string"
3.
for %%i in (%str%) do echo [%%i](tags/%%i.html)
4. Итак, в вашем случае. Первый цикл for получает строку, затем вы можете просто выполнить то же самое, но удалить переводы строк..
Ответ №1:
Вот пример того, как вы можете это сделать. Обратите внимание, что я просто использовал некоторые части в качестве примера, поскольку у меня сейчас нет времени форматировать escape-символы, но вы поймете идею :)
@echo off
set "lineNr=5"
set /a lineNr-=1
for /f "usebackq delims=" %%c in (`more %lineNr% "%~1"`) DO set "line=%%c"
for %%i in (%line%) do echo| set /p =[%%i](tags/%%i.html)>>index.txt
Комментарии:
1. Я получаю только последнюю строку файла, используя это, что имеет смысл. Команда more начнется здесь со строки 5 и сделает переменную «line» равной каждой строке в файле по мере выполнения more. Когда больше завершено, «line» содержит только последнюю строку в файле, и это то, что «set» записывает в index.txt
Ответ №2:
Хорошо, я заставил это работать, выполнив это —
set "lineNr=5"
set /a lineNr-=1
for /f "usebackq delims=" %%c in (`more %lineNr% "overview.md"`) DO (
set "line=%%c"
goto :next
)
:next
for %%i in (%line%) do echo| set /p =[%%i](tags/%%i.html) >> index.txt
Необходимо вырваться из списка строк цикла после первой требуемой строки (строка 5).