Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
1 / 1 / 0
Регистрация: 13.09.2018
Сообщений: 110

Чтение из файла нескольких строк и присвоение их значений переменным

01.06.2021, 20:15. Показов 3825. Ответов 30

Студворк — интернет-сервис помощи студентам
Помогите! Поиск не помог...
Есть файл My.log
set "LogPatch=%~dp0My.log"

>4556<
>4654566<
2121
>89878978<

Строка 2121 не нужна для обработки.
Мне необходимо его прочитать Bat-ником, и работать с переменными:

set Param+1=4556
set Param+2=4654566

set Param+3=89878978

0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.06.2021, 20:15
Ответы с готовыми решениями:

Присвоение переменным значений, взятых из файла
Добрый день! Подскажите как присвоить переменным значения из файла. Имеются 12 переменных(n1-12 к примеру).Для них создан файл, где...

Парсинг\присвоение значений переменным из лог-файла
Доброго дня, всем. Задача разобрать Cobian 11 лог-файл стандартными Windows средствами, без применения дополнительных телодвижений (напр....

Присвоение переменным строк из файла и передача переменной в сопряжённый .bat-файл
Добрый день! Хочу максимально автоматизировать процесс копирования файла на рабочую станцию. Есть 1.bat следующего содержания: chcp...

30
1 / 1 / 0
Регистрация: 13.09.2018
Сообщений: 110
01.06.2021, 21:52  [ТС]
Студворк — интернет-сервис помощи студентам
Хороший вопрос. Пока не знаю, скорей всего еще и кодировку придётся настраивать. My.log это результат другого bat.
OEM086
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
01.06.2021, 22:17
Лучший ответ Сообщение было отмечено nordri как решение

Решение

nordri, пробуйте, предварительно сохранив скрипт в кодировке OEM-866:
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1 delims=><" %%a in ('type my.log ^| findstr /rc:"^>.*<$"') do (
    set /A count+=1
    set "Param+!count!=%%a"
)
pause
exit
1
1 / 1 / 0
Регистрация: 13.09.2018
Сообщений: 110
08.06.2021, 00:08  [ТС]
Так и не разобрался что значит:
Цитата Сообщение от Karen87 Посмотреть сообщение
Windows Batch file
1
2
set /A count+=1
    set "Param+!count!=%%a"
Но вот что получилось
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
SetLocal EnableDelayedExpansion
set "LogPatch=My.log"
for /f "tokens=1 delims=><" %%a in ('type "%LogPatch%" ^| findstr /rc:"^>.*<$"') do (
set /a Number+=1
call :#Numb !Number! %%a
)
Echo Max number string !Number! 
pause
exit
:#Numb
Echo String [%1] value: %2
exit /b
My.log
>4556<
>4654566<
2121
>89878978<
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
08.06.2021, 00:10
nordri, ну вроде правильный код написали. Выводит то, что нужно?
0
1 / 1 / 0
Регистрация: 13.09.2018
Сообщений: 110
08.06.2021, 00:27  [ТС]
Выводит.
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
08.06.2021, 00:37
Ну и замечательно
0
1 / 1 / 0
Регистрация: 13.09.2018
Сообщений: 110
08.06.2021, 01:53  [ТС]
Цитата Сообщение от nordri Посмотреть сообщение
Но вот что получилось
Вот что я хотел получить:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
SetLocal EnableDelayedExpansion
set "LogPatch=%~dp0My.log"
:: %~dp0 папка с батником \My.log
for /f "tokens=1 delims=><" %%a in ('type "%LogPatch%" ^| findstr /rc:"^>.*<$"') do (
set /a Number+=1
Set param+!Number!=%%a
call :#Numb !Number! %%a
)
Echo Max number string !Number! 
set /p LikeSet="Enter number  string  "
set Like=!param+%LikeSet%!
Echo %Like%
pause
exit
:#Numb
Echo String [%1] value: %2
exit /b
:#Find
Чтение содержимого файла, и вывод на экран (консоль через канал Echo) построчно, с нумерацией строк.
Для последующего выбора полученной строки и присвоение её значения set Like
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
08.06.2021, 02:45
Цитата Сообщение от nordri Посмотреть сообщение
Чтение содержимого файла, и вывод на экран (консоль через канал Echo) построчно, с нумерацией строк
Windows Batch file
1
2
3
@echo off
<file.txt (for /f "tokens=1* delims=" %%a in ('find /n /v ""') do @echo %%a%%b)
pause
Добавлено через 7 минут
вывести нужную строку:
Windows Batch file
1
2
3
@echo off
<"file.txt" (for /f "tokens=2 delims=[]" %%a in ('find /n /v ""^|find "[5]"') do @echo:%%a)
pause
вывести номер строки "stroka":
Windows Batch file
1
2
3
@echo off
<"file.txt" (for /f "delims=[]" %%a in ('find /n "stroka"') do @echo %%a)
pause
вывести первую строку потом свои строки потом вторую строку
Windows Batch file
1
2
3
4
5
6
7
@echo off
<file.txt (set /p s1=& set /p s2=)
echo %s1%
echo Своя строка 1
echo Своя строка N
echo %s2%
pause
2
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,815
08.06.2021, 08:50
alpap, в общем первом случае цикл не требуется:
Windows Batch file
1
find/n /v "" file.txt
Windows Batch file
1
findstr/nrc:.* file.txt
1
1 / 1 / 0
Регистрация: 13.09.2018
Сообщений: 110
08.06.2021, 10:13  [ТС]
У меня придумалось вот это:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@echo off
:#St
rem chcp 1255>nul
SetLocal EnableDelayedExpansion
set "LogPatch=%~dp0My.log"
for /f "tokens=1 delims=><" %%a in ('type "%LogPatch%" ^| findstr /rc:"^>.*<$"') do (
set /a Number+=1
Set Param+!Number!=%%a
call :#Num !Number! "%%a"
)
echo.
Echo Max number string !Number! 
echo.
choice /c !NumberString! /M "Enter number string  "
for /f "tokens=1 delims=" %%l in ('echo !Param+%errorlevel%!') do set "LikeChoise=%%l"
echo.& echo Your choise %errorlevel% string with value   !LikeChoise!
pause
cls
ENDLOCAL
rem exit
goto #St
:#Num
echo.
Echo String [%1] value: %2
set NumberString=!NumberString!!Number!
rem echo !NumberString!
::последовательность строк 1 12 123 1234
exit /b
За то интересно получилось с ключами Choise.

Code
1
2
3
for /f "tokens=1 delims=" %%l in ('echo !Param+%errorlevel%!') do set "LikeChoise=%%l"
echo.& echo Your choise %errorlevel% string with value   !LikeChoise!
set NumberString=!NumberString!!Number!

Еще раз, исходный файл.

My.log

Изначально все нужные строки обрамлены ><
>4556<
>4654566<
2121
>89878978<
0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.06.2021, 14:34
Цитата Сообщение от nordri Посмотреть сообщение
У меня придумалось вот это
Откуда такое желание писать именно нечитабельные программы?
Если взять любой рандомный язык программирования, то рядом с ним код на batch с очень большой вероятностью будет похож на рандомный набор символов.


Просто сравни.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
os.execute("chcp 1251 > nul")
 
text = [[>4556<
>4654566<
2121
>89878978<]]
 
data = {} 
cnt = 1  
for m in text:gmatch(">(%d+)<") do 
    data[cnt] = m ; cnt = cnt+1  
end
print("Max number string:", cnt) 
-- ожидание пользовательского ввода
while true do 
    io.write("Введите номер строки:")
    n = io.read()
    if n == "q" then -- выход
        break; end 
    n = tonumber(n)
    -- если ввели число и в таблице есть строка с таким индексом
    if n ~= nil then
        if n == -1 then
            -- вывод всей таблицы: номер строки=значение
            for i,v in ipairs(data) do print(i,v) end    
        else  -- вывод по номеру строки 
            print(data[n])
        end    
        break
    end    
end
Code
1
2
3
4
5
6
7
8
9
10
11
J:\lua>lua test.lua
Max number string:      4
Введите номер строки:-1
1       4556
2       4654566
3       89878978
 
J:\lua>lua test.lua
Max number string:      4
Введите номер строки:1
4556

Это lua - самый маленький в мире интерпретируемый язык программирования. Для запуска требуется два файла:
lua.exe 119kb (интерпретатор)
lua54.dll 397kb (стандартаная библиотека)
опционально:
luac.exe 292kb (компилятор в байткод )


lua.rar
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.06.2021, 14:34

Чтение и присвоение значений из файла
Есть куча форм, из каждой формы происходит сохранение значений и свойств элементов (эдиты, комбобоксы и т.д) в текстовый файл. Получается...

Присвоение значений переменным
Друзья, сегодня впервые вплотную столкнулся с вопросом создания батников - нужно сделать батник, который по всему компьютеру удалял бы...

Присвоение значений переменным
В комбобокс на форме выводятся значения из столбца B. Private Sub UserForm_Initialize() i = 3 Do Until Cells(i, 2) = Empty ...

Присвоение значений переменным
В блоках модели вместо чисел используются имена переменных. В модели нужно использовать блок, который имеет ссылку на .m - файл, в котором...

Присвоение переменным значений
Добрый день! Подскажите пожалуйста, как лучше решить такую проблему программа для расчета, по экологии есть отдельный класс с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru