Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную

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

Пользователь


Сообщения: 133
Благодарности: 2

Профиль | Отправить PM | Цитировать


Уже часа 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%" используется более сложная конструкция.

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

Отправлено: 14:47, 10-11-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата VokaMut:
Нужно, что бы выводилась переменные в цикле, т.е. в идеал должна программа быть такой: »
Код: Выделить весь код
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
А вообще не понятно, что именно Вам нужно.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:53, 10-11-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 133
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 16:28, 10-11-2012 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


VokaMut, понятней не стало. Что именно у Вас не получается?

Отправлено: 17:49, 10-11-2012 | #4


Пользователь


Сообщения: 133
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Iska:
VokaMut, понятней не стало. Что именно у Вас не получается? »
Код: Выделить весь код
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 можно опустить

Отправлено: 08:15, 11-11-2012 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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

Так что:
Цитата VokaMut:
но в итоге переменная find:
Код: Выделить весь код
set find=%rerep%
Получается пустая... »
ничего другого ожидать не приходится.

Отправлено: 08:28, 11-11-2012 | #6


Пользователь


Сообщения: 133
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Iska:
ничего другого ожидать не приходится. »
Заменил на:
Код: Выделить весь код
set find=%replace%
Все равно в итоге переменная пустая, даже слово(findword) заменяется на пустое место


Последний раз редактировалось VokaMut, 11-11-2012 в 08:57.


Отправлено: 08:51, 11-11-2012 | #7


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Цитата VokaMut:
Все равно в итоге переменная пустая »
Так и должно быть!
1
Код: Выделить весь код
	setlocal enabledelayedexpansion
должно быть в начале кода
2 Присвоение переменной
Код: Выделить весь код
	set replace=%%i
происходит в блоке первого for и, для правильного ее использования в дальнейшем внутри блока, она должна использоваться в знаках "!", а не в "%".
3 В строке
Код: Выделить весь код
		set TMPR=!LINE:%find%=%replace%!
переменную %replace% (!replace!) использовать затруднительно. Попробуйте так:
Код: Выделить весь код
		set TMPR=!LINE:%find%=%%i!
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:27, 11-11-2012 | #8


Пользователь


Сообщения: 133
Благодарности: 2

Профиль | Отправить PM | Цитировать


В итоге получилось:
Код: Выделить весь код
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" и т.д...

Отправлено: 10:00, 11-11-2012 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата VokaMut:
Все равно итоге переменной find новое значение не присваивается и программа продолжает искать слово "123, заменяет на "234", потом снова ищет "123" и уже пытается заменить на "345" и т.д... »
Вы чего хотели добиться-то? Я, например, так и не понял конечной Вашей цели. И сейчас не понимаю. Полагал, что пониманию поможет выложенный Вами код, но этого не случилось.

Отправлено: 10:14, 11-11-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] поиск файла по маске и запись этого имени в переменную ___dima___ Скриптовые языки администрирования Windows 20 18-06-2017 01:46
Разное - Добавление имени файла в начало каждой строки. CkapHa Программирование и базы данных 2 02-01-2012 22:13
CMD/BAT - Смена кодировки текстового файла, поиск строки и разбор значения profcom Скриптовые языки администрирования Windows 0 10-11-2011 20:20
CMD/BAT - [решено] Чтение строки из файла в переменную Николя Скриптовые языки администрирования Windows 42 17-01-2010 19:42
[решено] Считывание параметров переменной morgan1991 AutoIt 3 07-03-2009 14:38




 
Переход