информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
[cmd.exe] увы :( 19.09.06 10:56  Число просмотров: 3309
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
<"чистая" ссылка>
> Что то мне подсказывает, что для второй команды в цепочке
> запускается отдельный shell и переменная изменяется в нем.
> После завершения цепочки этот шелл благополучно завершается
> вместе с установленной переменной.

Да, всё именно так и происходит. Даже обидно, что ты сам понял, я так люблю всё объяснять :(

> Создание временных файлов - не вариант. Может есть какой
> нибудь способ достичь желаемого?

AFAIK, создание временных файлов является, официально, самым простым вариантом для этого. Кроме того, он ещё и самый платформонезависимый, учитывая неожиданные флюктуации происходящие с синтаксисом cmd в разных версиях винды. Сам пользуюсь ими.
<beginners>
[cmd.exe] Перенаправление стандартного вывода в переменную 19.09.06 03:47  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Или я чего то не понимаю, или одно из двух

Хочу в cmd файле проверить есть ли изменения в репозитории svn
Команда svn st возвращает список изменений. Если изменений нет, то соответственно и выводится 0 байт. ERRORLEVEL всегда 0 (ошибок нет)

Собственно хочу перенаправить поток вывода в переменную, а уж ее то я как нибудь проверю.

Ясен пень никаких bash-евых `svn st` не выйдет, забавно, что
svn st >tmpfile
set /p SVNOUT=<tmpfile

---
работает, а
svn st | set /p SVNOUT=

---
нет.

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

Создание временных файлов - не вариант. Может есть какой нибудь способ достичь желаемого?
Можно попробовать так: [upd] 19.09.06 17:08  
Автор: Den <Denis> Статус: The Elderman
Отредактировано 19.09.06 17:12  Количество правок: 1
<"чистая" ссылка>
for /F %%i "КлючевыеСловаРазбора" in ('command') do mycheck.bat %%i

Где:
command - программа, стандартный вывод которой нужно обработать.
mycheck.bat - скрипт (или метка в этом же cmd скрипте), который обрабатывает переданные через %1 и т.д. параметры.
Возможно придется повозиться с разделителями в выхлопе программы, для этого подробности смотри по ссылке в разделе "КлючевыеСловаРазбора".

MS support - cmd shell - for
О. Именно то, что я искал 19.09.06 18:30  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> for /F %%i "КлючевыеСловаРазбора" in ('command') do
> mycheck.bat %%i

Кто бы мог подумать, что искать стоит в for-е :-)
В общем на данный момент это уже неактуально, но в следующий раз буду иметь в виду.
[cmd.exe] увы :( 19.09.06 10:56  
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
<"чистая" ссылка>
> Что то мне подсказывает, что для второй команды в цепочке
> запускается отдельный shell и переменная изменяется в нем.
> После завершения цепочки этот шелл благополучно завершается
> вместе с установленной переменной.

Да, всё именно так и происходит. Даже обидно, что ты сам понял, я так люблю всё объяснять :(

> Создание временных файлов - не вариант. Может есть какой
> нибудь способ достичь желаемого?

AFAIK, создание временных файлов является, официально, самым простым вариантом для этого. Кроме того, он ещё и самый платформонезависимый, учитывая неожиданные флюктуации происходящие с синтаксисом cmd в разных версиях винды. Сам пользуюсь ими.
[cmd.exe] Прикол с временным файлом в том 19.09.06 13:55  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> AFAIK, создание временных файлов является, официально,
> самым простым вариантом для этого. Кроме того, он ещё и

Что он создается до запуска, собственно команды и svn st отображает его в появление в выводе, как измнение. Вариант с созданием временного файла в более верхних каталогах вообще не рассматриваю, так как это в принципе не переносимо с тачки на тачку, но наверное мне придется либо заносить этот файл в игнор лист, либо создавать его с расширением, которое добавлено в глобальный игнор для svn-а.

> самый платформонезависимый, учитывая неожиданные флюктуации
> происходящие с синтаксисом cmd в разных версиях винды. Сам
> пользуюсь ими.

Ага, я его тоже сам нашел и пользовал, но мне он почему то казался а-ля "через %опу". Не знал, что на самом деле это и есть правильный способ.
Set tmpfile=%temp%\svntemp001 19.09.06 14:58  
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
<"чистая" ссылка>
SET TMPFILE=%TEMP%\svntemp001

svn st >%TMPFILE%
О. Вариант. Правда я уже сделал по другому и закоммитил 19.09.06 18:16  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach