Цикл текстового файла с использованием пакетных файлов

#batch-file

#пакетный файл

Вопрос:

Я хочу выполнить цикл через плоский файл (текстовый файл), который содержит 3000 строк. Я хочу иметь возможность печатать 30 строк, затем печатать заметку, затем снова печатать следующие 30 строк и заметку.

Я пробовал нижеприведенный способ, но он не работает.

 For /L %%file in (1,30,3000) do echo %%file
  

Ожидаемый результат:

Название описание description

XXXXX xxxxxxxxx Xxxxxxx

XXXXX xxxxxxxxx Xxxxxxx

Некоторое примечание для добавления

Название описание description

XXXXX xxxxxxxxx Xxxxxxx

XXXXX xxxxxxxxx Xxxxxxx

Ответ №1:

Ваш цикл for полностью недействителен. Метапеременные должны содержать один символ, а не слово. что-то вроде, %%i но независимо от этого, /L цикл будет просто делать что-то столько раз, сколько вы ему скажете, что тоже не будет делать то, что вы думаете здесь.. Попробуйте это:

Примечание Пожалуйста, убедитесь, что вы изменили D:work dirsomefile.txt в 3-й строке кода свое имя файла, если оно находится в том же каталоге, либо добавьте к нему полный путь, если нет.

 @echo off
setlocal enabledelayedexpansion
set "file=somefile.txt"
set /a cnt=0

for /f "delims=" %%i in (%file%) do (
 set /a "eval=(cnt 1)%0"
 if not !eval! equ 0 echo %%i
 if !eval! equ 0 (
    echo %%i
    Echo Add YOUR note here!!!
)
 set /a cnt =1
)
  

Если затем требуется, чтобы примечание было вставлено пользователем вручную, используйте set /p как показано ниже:

 @echo off
setlocal enabledelayedexpansion
set "file=somefile.txt"
set /a cnt=0

for /f "delims=" %%i in (%file%) do (
 set /a "eval=(cnt 1)%0"
 if not !eval! equ 0 echo %%i
 if !eval! equ 0 (
    echo %%i
    set /p note=Add note?
    echo !note!
)
 set /a cnt =1
)
  

Комментарии:

1. результат получен?

2. Я хочу, чтобы он запускался, отображал данные 30 строк и останавливался, чтобы добавить примечание внизу и продолжить цикл до конца, например, 1,2,3,4,5 добавить примечание 6,7,8,9,10 добавить примечание 11,12,13,14,15 добавить примечание, зацикливающее конец текстового файла. Я запускаю его только сейчас, он зацикливается, но показывает каждые 30 строк

3. Два set /a могут быть объединены в один set /a "eval=(cnt 1)%0,cnt =1" только при необходимости, когда сначала всегда повторяется %%i .

4. @LotPings да, спасибо, добавлено дополнительное if из-за изменений требований, поэтому не хотелось еще что-то менять и тестировать. Пройдемся по нему и сделаем ответ лучше. Спасибо за комментарий.