#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 из-за изменений требований, поэтому не хотелось еще что-то менять и тестировать. Пройдемся по нему и сделаем ответ лучше. Спасибо за комментарий.