CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную

Аватара пользователя
VokaMut

CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную

Сообщение VokaMut »

Уже часа 2 держу открытым OSzone и пытаюсь сам добиться своего, но одно осталось нерешенным:



Код:

Код: Выделить всё

set var1=text1
set var2=text2
set var3=text3
set var4=text4
for /l %%i in (1,1,4) do (
	set text=!var%%i!
	echo %text%
)

Подобный код нашел в одной из тем.



Нужно, что бы выводилась переменные в цикле, т.е. в идеал должна программа быть такой:



Код:

Код: Выделить всё

echo text1
echo text2
echo text3
echo text4

Но переменных "var*" 78 штук и вместо "echo %text%" используется более сложная конструкция.



Если это покажется проще, то сделайте пожалуйста цикл вытаскивания переменной из файла, новая строчка-новое значение переменной(так же ":" или ";" разделителями могу сделать в файле).

Буду очень признателенИзображение
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную

Сообщение Iska »

Цитата VokaMut:



Нужно, что бы выводилась переменные в цикле, т.е. в идеал должна программа быть такой:
CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную






Код:

Код: Выделить всё

set var01=text1
set var02=text2
set var03=text3
set var04=text4
set var09=text9
set var10=text10
set var11=text11
set var99=text99
for /f "tokens=2* delims==" %%i in ('set var') do echo %%i

А вообще не понятно, что именно Вам нужно.
Аватара пользователя
VokaMut

Re: CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную

Сообщение VokaMut »

Цитата Iska:



Цитата VokaMut:

А вообще не понятно, что именно Вам нужно.
CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную




Файле 1.po происходит замена одного слова(textN), после файл компилируется в 1.mo и вместе с окружающими файлами архивируется в textN.rar
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную

Сообщение Iska »

Цитата Iska:



VokaMut, понятней не стало. Что именно у Вас не получается?
CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную






Код:

Код: Выделить всё

chcp 866
::файл для редактирования
set infile=1\file.po
::первое слово которое ищем в файле для замены
set find=findword
::последующие
set var1=Слово1
set var2=Слово2
set var3=Слово3
set var4=Слово4
::цикл проходит по каждой переменной выше
for /f "tokens=2* delims==" %%i in ('set var') do ( 
::задаем заменяющее слово
set replace=%%i
::заменяем его
@echo off
setlocal enabledelayedexpansion
for /F "tokens=* delims=," %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%find%=%replace%!
echo !TMPR!>>tmp.txt
)
move tmp.txt %infile%
::преобразуем file.po в file.mo
msgfmt file.po -o file.mo
::архивируем всю папку с этим файлом и исключаем file.po
"C:\PROGRA~1\WinRAR\rar.exe" a -m5 -s -y -ep1 -r -x*"file.po" "2\%replace%.rar" "1\*.*"
::теперь ищем заменяеющее слово и заменяем его на следующее
set find=%rerep%
::сделал паузу для проверки
pause
)

После просмотра увидел что:



Код:

Код: Выделить всё

set replace=%%i

Задается правильно, но в итоге переменная find:



Код:

Код: Выделить всё

set find=%rerep%

Получается пустая...



Для проверки работоспособности архивирование и компилирование из po в mo можно опустить
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную

Сообщение Iska »

Что такое «rerep» и откуда оно берётся? Ибо в первый раз она появляется из ниоткуда и уже сразу участвует в присваивании.



Так что:


Цитата VokaMut:



но в итоге переменная find:



Код:

Код: Выделить всё

set find=%rerep%

Получается пустая...
CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную




ничего другого ожидать не приходится.
Аватара пользователя
VokaMut

Re: CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную

Сообщение VokaMut »

Цитата Iska:



ничего другого ожидать не приходится.
CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную




Заменил на:



Код:

Код: Выделить всё

set find=%replace%

Все равно в итоге переменная пустая, даже слово(findword) заменяется на пустое место



Изображение
Аватара пользователя
gora

Re: CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную

Сообщение gora »

Цитата VokaMut:



Все равно в итоге переменная пустая
CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную




Так и должно быть!

1

Код:

Код: Выделить всё

	setlocal enabledelayedexpansion

должно быть в начале кода

2 Присвоение переменной

Код:

Код: Выделить всё

	set replace=%%i

происходит в блоке первого for и, для правильного ее использования в дальнейшем внутри блока, она должна использоваться в знаках "!", а не в "%".

3 В строке

Код:

Код: Выделить всё

		set TMPR=!LINE:%find%=%replace%!

переменную %replace% (!replace!) использовать затруднительно. Попробуйте так:

Код:

Код: Выделить всё

		set TMPR=!LINE:%find%=%%i!
Аватара пользователя
VokaMut

Re: CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную

Сообщение VokaMut »

В итоге получилось:



Код:

Код: Выделить всё

chcp 866
setlocal enabledelayedexpansion
set infile=file.po
set find=123
set var01=234
set var02=345
set var03=567
set var04=678
for /f "tokens=2* delims==" %%i in ('set var') do ( 
for /F "tokens=* delims=," %%n in (!infile!) do ( 
set LINE=%%n
set TMPR=!LINE:%find%=%%i!
Echo !TMPR!>>TMP.TXT
)
move TMP.TXT %infile%
set find=!i!
pause
)

Все равно итоге переменной find новое значение не присваивается и программа продолжает искать слово "123, заменяет на "234", потом снова ищет "123" и уже пытается заменить на "345" и т.д...
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную

Сообщение Iska »

Цитата VokaMut:



Все равно итоге переменной find новое значение не присваивается и программа продолжает искать слово "123, заменяет на "234", потом снова ищет "123" и уже пытается заменить на "345" и т.д...
CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную




Вы чего хотели добиться-то? Я, например, так и не понял конечной Вашей цели. И сейчас не понимаю. Полагал, что пониманию поможет выложенный Вами код, но этого не случилось.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»