Имя пользователя:
Пароль:
 | Правила  

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

Закрытая тема
Настройки темы
CMD/BAT - Как из for получить значение из одной строки смещаясь на 1 при каждом проходе

Новый участник


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

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


Изменения
Автор: Voodooman
Дата: 27-08-2011
Условия:
Имею 2 "рафинированных" файла со списками, в первом файле по имени name.txt в каждой строчке имеются строки с названиями, во втором файле имеются айди соответсвующие именам именам в первом файле, то есть айди из первой строки соответствует имени из первой строки, айди из 555 строки id.txt соответствует имени из 555 строки в id.
Требуется:
Получить в каждом проходе 2 соответствующие друг друг переменных из одной и той же строчки в двух разных файлах, при следующем проходе перезаписать их новыми переменными со следующей строки

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

setlocal enabledelayedexpansion

ECHO on
SET N
=0
FOR /"usebackq tokens=* delims=" %%A IN (name.txt) DO (
    FOR /
"usebackq skip=%N% tokens=* delims=" %%B IN (id.txt) DO (
        
SET /a N=!N!+1
        SET GameName
=%%A
        SET GameId
=%%B
    
)
    ECHO !
GameName!=!GameId!
)
pause 

Проблема:
Первый For получающий имя без всяких проблем каждый цикл переходит к новой строчке пока не достигнет конца файла, с каждым новым проходом я получаю нужно мне имя файла.
Но второй цикл For, заключенный внутри первого, при выходе из цикла и возврате в предыдущий из которого уже выводится эхо, всегда дает мне айди из последней строки таким образом разным именам всегда присваивается 1 и тот же айди.
Я пробовал перенести эхо внутрь второго цикла, но при этом получался противоположный эффект - я получал 1 и то же имя с разными айди.
Я попробовал добавить skip=N и ввел простой счетчик прохода N=N+1 и пытаюсь его значение подставить в качестве значения пропускаемых строк, по логике я на самом деле должен получить такой результат как и до этого (это я уже сообразил после добавления, ведь даже если я начиная с другой строки, все равно цикл закончится последней :D ), но по странной причине ошибка в синтаксисе.
Ну в общем не знаю, как заставить внутренний цикл читать одну заданную номерную строчку вместо всех и завершаться. Я где то видел что внутри IN указывали примерно вот таким способом ([1] [555]) номер нужной строчки, но как это совместить с именем файла и каков правильный синтаксис еще и с подстановкой переменной N?

П.С. - Как я понял find и findstr в моем случае не получится использовать, так как изначально неизвестно что искать, кроме номера строчки. В общем очень нуждаюсь в помощи, залип с такой простой вещью, а документация что в винде что в нете слишком куцая чтобы найти решение.

Отправлено: 14:57, 27-08-2011

 

Ветеран


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

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


Цитата Foreigner:
Да что-то как-то так пошло, чистые батники и так с текстом работают "не слишком", а тут еще придется заботится о "!". Правда это не отменяет "%". Есть конечно универсальные решения, но это усложняет код. Имхо »
Foreigner, спасибо, ясно.


Цитата Voodooman:
Дело в том что ваши методы джама из for во вне мне не подходят, так как у меня 3 фложенных for »
Voodooman, а может тогда стоит перейти на WSH?

Отправлено: 20:53, 27-08-2011 | #11



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

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


Новый участник


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

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


Не, WSH не стоит, я с ним не знаком и тут мне уже принципиально надо заставить бат файл каким то хитрым способом прочить только одну строчку!)) Я не успокоюсь пока не заставлю его это сделать)))

Решил поискать внешние консольные утилиты для упрощения задачи и поставки их в комплекте вместе с готовым батником, наткнулся на эту утилиту для чтения, изменения и удаления параметров из ини файлов через батники http://www.horstmuc.de/wbat32.htm#inifile

Сейчас попытаюсь еще найти более широкопрофильную утилиту, которая может читать заданную строчку в любую сторону, помню мне однажды попадалась такой монстр, который через командную строку умел делать все, найти бы его сейчас и не извращаться со встроенным ограниченным функционалом)

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

Кстати, я забыл, как мне из полученной строки взять и использовать в качестве переменной последние 44 символа без всяких делиметеров и токенов? какие там операторы нужно использовать?

Отправлено: 21:33, 27-08-2011 | #12


Старожил


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

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


Цитата Foreigner:
Просто я по возможности избегаю enabledelayedexpansion при echo-выводе текста. »
Код: Выделить весь код
for /l %%j in (1,1,%cnt%) do call echo %%names_%%j%%=%%id_%%j%%
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:46, 27-08-2011 | #13


Ветеран


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

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


kiripanda, можно и так.

Отправлено: 22:04, 27-08-2011 | #14


Новый участник


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

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


А кто нибудь на мои вопросы здесь ответит?))
еще раз спрошу - как взять значение из указанной строчки и прервать лишь 1 фор после этого чтобы избежать парсинга отсальных строк?

Отправлено: 22:25, 27-08-2011 | #15


Ветеран


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

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


Цитата Voodooman:
Не, WSH не стоит, »
Это как?

«%systemroot%\system32\wscript.exe» наличествует?
Цитата Voodooman:
я с ним не знаком и тут мне уже принципиально надо заставить бат файл каким то хитрым способом прочить только одну строчку!)) Я не успокоюсь пока не заставлю его это сделать))) »
Спасибо, Ваша цель понятна.

Цитата Voodooman:
А кто нибудь на мои вопросы здесь ответит?)) »
Я даже не понял вопрос:
Цитата Voodooman:
как взять значение из указанной строчки и прервать лишь 1 фор после этого чтобы избежать парсинга отсальных строк? »

Отправлено: 23:01, 27-08-2011 | #16


Новый участник


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

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


(флейм удален)

Последний раз редактировалось Petya V4sechkin, 29-08-2011 в 16:45. Причина: пункт 3.1 http://forum.oszone.net/rules.html


Отправлено: 23:34, 27-08-2011 | #17


Ветеран


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

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


Цитата Voodooman:
давай ты не будешь играть в дурака?
»
Предпочитаю лучше выглядеть дураком и спросить, нежели изображать понимание там, где его у меня нет. Если Вы об этом.

читать дальше »
По поводу Ваших прочих многих слов, не относящихся к сути вопроса, равно тона, коим они высказаны… Не получается у Вас сарказм.

Что ж, продолжайте дискуссию в том же духе — и обрящите. Я же — учту на будущее.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:29, 28-08-2011 | #18


Ветеран


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

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


Voodooman,
Штатными средствами, без счетчиков и не зная содержимое строки, этого сделать нельзя. Для парсинга текста написано много утилит -- sed, awk, grep, gsar и т.д.

Отправлено: 05:54, 28-08-2011 | #19



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как получить значение параметра из реестра, добавить значение в текстовый файл etc.? Dark Ange1 Скриптовые языки администрирования Windows 28 22-06-2022 14:37
CMD/BAT - Как получить значение искомой подстроки в строке? Loki3D Скриптовые языки администрирования Windows 11 24-02-2018 08:37
Доступ - Как получить права на файл или реестр из командной строки и вернуть всё как было hb860 Microsoft Windows 7 9 25-02-2013 14:03
Как определить кодировку строки передаваемой как значение параметра OLE-серверу Excel RUVATA AutoIt 12 13-12-2010 23:22
Как получить значение CPU и VM. Желательно на С++ Lenycik Программирование и базы данных 3 16-05-2007 12:07




 
Переход