Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
|
[cmd.exe] увы :( 19.09.06 10:56 Число просмотров: 3387
Автор: 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 <Денис Т.> Статус: 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
|
|
|
|