Пакетное извлечение каждого слова в строке по ссылке markdown

#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).