2009-07-31 2 views
2

Я хотел бы иметь возможность изменить заголовок окна Command в разных точках всего сценария NAnt.Изменение названия окна Command (CMD) из NANT

Я пытался использовать задачу называть «название myTargetName», но это дает мне следующую ошибку:

'title' failed to start.

The system cannot find the file specified 

Есть ли способ сделать это, пожалуйста? Заранее спасибо!

ответ

2

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

Название консоли возвращается после завершения обработки.

<project default="title"> 

    <target name="title"> 
     <consoletask title='step 1'/> 
     <sleep minutes="1" /> 
     <consoletask title='step 2'/> 
     <sleep minutes="1" /> 
     <consoletask title='step 3'/> 
     <sleep minutes="1" /> 
    </target> 

    <script language="C#"> 
     <code> 
      [TaskName("consoletask")] 
      public class TestTask : Task 
      { 
       private string title; 

       [TaskAttribute("title", Required=true)] 
       public string Title 
       { 
        get { return title; } 
        set { title = value; } 
       } 

       protected override void ExecuteTask() { 
        System.Console.Title = title; 
       } 
      } 
     </code> 
    </script> 
</project> 
+0

Взрыв на деньги! Хорошее усилие! Именно то, что я искал. –

0

Вы можете использовать CMD или пакетный файл, чтобы запустить сценарий NANT, содержащий это:

title %1 
%NANT_PATH%\nant.exe %1 
+0

Как я принимаю ваше предложение о том, что файл cmd изменяет заголовок, а затем запускает определенный скрипт. Это то, что вы имели ввиду? Что я имею в виду, это то, что во время запуска скрипта NAnt в окнах Cmd я хочу иметь возможность переименовать заголовок рабочего окна на основе adhoc, как способ указать, какая часть скрипта система в настоящее время обрабатывается, так как каждый скрипт может работать в течение 5 минут или около того. –

+0

Вы можете сделать cmd или пакет, который один после того, как вы построите нужные вами цели, и каждый новый целевой вызов задает заголовок. Не очень удобно, я должен признать, но должен работать без каких-либо дополнительных требований. – zoidbeck

0

Это должно работать:

<exec>title Step One</exec> 

<!-- Do some stuff --> 

<exec>title Step Two</exec> 

Это использует регулярное cmd.exe команду.

+0

Нет, извините - я получаю эту ошибку от NAnt ... «program» - обязательный атрибут . –

+0

Вы правы. 'title' не является исполняемым как таковой, а специальная команда, признанная' cmd.exe'. –

1

Если вы собираете эту небольшую программу в качестве консольного приложения:

namespace SetTitle 
{ 
    internal static class Program 
    { 
     private static void Main(string[] args) 
     { 
      System.Console.Title = string.Join(" ", args); 
     } 
    } 
} 

Тогда это будет работать:

<exec>SetTitle.exe "Step One"</exec> 

<!-- Do some stuff --> 

<exec>SetTitle.exe "Step Two"</exec> 

Вы могли бы сделать то же самое с пользовательской NAnt задачи, но работа, связанная бы быть более сложным, и вам все равно придется сделать сборку задач NAnt доступной при выполнении сценария.

+0

Nope - попробовал это, и он не работает, извините. –

1

Попробуйте это:

 
' In your command prompt 
title foobar 

' The title now should say 'foobar' without quotes 

' Now issue this... 
cmd /k fubar 

' The title now should say 'fubar' without quotes 

Так что я думаю, вы должны изменить его нравится:

 
<exec>cmd /k title one </exec> 

Edit: В конце сценария, вызовите команду exit для выхода вложенные уровни процессора командной строки cmd.exe ... Предположим, у вас есть три «exec» для «cmd/k», вам понадобятся три команды «exit», чтобы вернуться к исходной оболочке cmd.exe, подумайте о он как popping cmd.e х из стека на время сценария NANT ...

Edit # 2: Согласно комментарий Бретта ... просто мысль - почему бы не сделать это таким образом ....

 
<exec>cmd /k title one </exec> 
<exec>exit</exec> 

Добавьте команду «exit» сразу после установки названия окна ...?

Надеюсь, это поможет, С уважением, Tom.

+0

Хмм - попробовал это. Это нормально, если командное окно находится в среде управления, но внутри сценария NAnt это может быть «iffy», как если бы скрипт сборки выходил наполовину, мой новый сеанс cmd все еще остается открытым. –

+0

@Brett: hmmm ok, хорошая точка там! .... см. Мой исправленный ответ выше ... – t0mm13b