[программистское]
Oct. 10th, 2007 09:49 pmчто-то не могу сообразить. есть relative path, типа "..\..\my\special\folder\containing\generic\scripts", который в начале выполнения cmd скрипта надо добавить в path, чтобы оттуда можно было вызывать по-быстрому. но добавлять, естественно, надо absolute path, а не relative. как одно в другое превратить внутри командника?
и, уж раз зашла такая пьянка - как из программы, запущенной из комадника, передать что-нибудь обратно в этот командник? передать что-нибудь более осмысленное, чем errorlevel. под программой можно понимать что угодно - бинарник, powershell script, другой cmd script.
и, уж раз зашла такая пьянка - как из программы, запущенной из комадника, передать что-нибудь обратно в этот командник? передать что-нибудь более осмысленное, чем errorlevel. под программой можно понимать что угодно - бинарник, powershell script, другой cmd script.
(no subject)
Date: 2007-10-11 04:57 am (UTC)По первому пункту, если текущий каталог всё равно сменится, можно сделать что-то вроде:
По второму пункту — через файлик.
(no subject)
Date: 2007-10-11 04:58 am (UTC)(no subject)
Date: 2007-10-11 05:02 am (UTC)а что потом с файлом делать? как его содержимое превратить в переменные cmd, которыми можно оперировать?
(no subject)
Date: 2007-10-11 06:50 am (UTC)======= sample begin =======
script1.bat:
-----------
echo in script 1
call script2.bat
echo %SCRIPT2_RESULT%
script2.bat:
-----------
echo in script2
set SCRIPT2_RESULT="result of script2"
======= sample end =======
в script1 необходимо вызывать второй скрипт через call, иначе для нег создастся новое окружение.
(no subject)
Date: 2007-10-11 09:17 am (UTC)(no subject)
Date: 2007-10-11 09:21 am (UTC)(no subject)
Date: 2007-10-11 06:39 am (UTC)(no subject)
Date: 2007-10-11 09:01 am (UTC)(no subject)
Date: 2007-10-12 08:26 am (UTC)(no subject)
Date: 2007-10-11 07:41 am (UTC)> help FOR
...
Finally, you can use the FOR /F command to parse the output of a
command. You do this by making the filenameset between the
parenthesis a back quoted string. It will be treated as a command
line, which is passed to a child CMD.EXE and the output is captured
into memory and parsed as if it was a file. So the following
example:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
would enumerate the environment variable names in the current
environment.
...
(no subject)
Date: 2007-10-11 09:08 am (UTC)а попроще пример не можешь привести? скажем, мне не надо парсить, а просто запихнуть в environment variable.
(no subject)
Date: 2007-10-11 03:31 pm (UTC)Насчёт не работает - может покажешь код?
(no subject)
Date: 2007-10-11 06:12 pm (UTC)как стало ясно из второго сниппета, нужен двойной процент.
мапед не мой
Date: 2007-10-12 08:22 am (UTC)А насчёт %% - это очень древний прикол. :)
(no subject)
Date: 2007-10-11 03:47 pm (UTC)-----cut here-----------
@echo off
FOR /F "usebackq" %%I IN (`echo testtest`) DO set mytest=%%I
echo %mytest%
-----cut here-----------
выдаёт в stdout
testtest
Вместо `echo testtest` можно подставить любой исполняемый файл, выдающий в stdout нужное значение. Там в-принципе ещё можно и split полученной строчки сделать по произвольному разделителю, но это, как я понимаю, уже лишнее. :)
(no subject)
Date: 2007-10-11 06:10 pm (UTC)(no subject)
Date: 2007-10-12 08:29 am (UTC)В юниксовых есть тот самый бэктик (``), кастрированый вариант которого засветился в микрософтовском FOR.
(no subject)
Date: 2007-10-11 07:53 am (UTC)(no subject)
Date: 2007-10-11 09:13 am (UTC)(no subject)
Date: 2007-10-11 08:17 am (UTC)Серьезно -- есть же порт sh под форточки, проще всего писать такие вещи на нем.
присвоить переменной myvar STDOUT myprog:
myvar = `myprog params`
и т.п.
(no subject)
Date: 2007-10-11 09:24 am (UTC)(no subject)
Date: 2007-10-11 09:08 am (UTC)(no subject)
Date: 2007-10-11 09:32 am (UTC)(no subject)
Date: 2007-10-13 04:06 am (UTC)