Вы рассматривали использование Windows PowerShell вместо Cmd.exe? PowerShell может работать с объектами .NET или COM, а не ограничиваться простым текстом, как в случае с Cmd.exe. Поэтому вам не нужно беспокоиться о выходе вообще - вы просто кодируете свои классы, а затем используете их непосредственно из PowerShell. Так, например, вы можете сделать это:
PS C:\WINDOWS\system32> $list = New-Object System.Collections.ArrayList
PS C:\WINDOWS\system32> $list.Add("First item")
0
PS C:\WINDOWS\system32> $list.Add("Second item")
1
PS C:\WINDOWS\system32> $list
First item
Second item
PS C:\WINDOWS\system32> $list.Count
2
PS C:\WINDOWS\system32>
Как вы можете видеть, легко создавать объекты и вызвать их методы и свойства с помощью PowerShell. Это одна из причин того, что PowerShell теперь является основным интерфейсом управления Microsoft. Возможность работать с объектами из интерфейса командной строки очень эффективна, и PowerShell стоит посмотреть.
Однако, если это невозможно, то с помощью немного больше работы вы можете получить то, что хотите, используя cmd.exe, просто написав консоль.
В консольном приложении всегда есть в наличии три потока, известный как stdin
, stdout
и stderr
(«стандартный ввод», «стандартный вывод» и «стандартная ошибка»). stdout
обычно подключается к дисплею, и stdin
обычно подключается к входу клавиатуры, поэтому по умолчанию консольное приложение вводит с клавиатуры и записывает вывод на дисплей. Однако потоки могут быть перенаправлены в/из файла или непосредственно в другую программу.
>
символ перенаправляет stdout
в файл. Таким образом,
dir > myfiles.txt
записывает вывод в файл myfile.txt вместо отображения.
Аналогичным образом, выход может быть «водопроводной» непосредственно к другой программе, например:
dir | more
Труба (|
) символ в середине соединяет stdout
из команды dir
непосредственно stdin
команды more
и поэтому данные передаются непосредственно между двумя программами. Обратите внимание, что dir все еще просто записывает на консоль, он не обязательно знает, что его выход был перенаправлен.
Используя один из вышеперечисленных методов, в сочетании с сериализацией вы можете организовать передачу данных между приложениями командной строки. Вам нужно будет упорядочить ваши данные для сериализации в формате, который обе программы могут понять, и облегчить жизнь с использованием формата, такого как XML или JSON, было бы разумным, поскольку его легче десериализовать, чем простой текст.
'Console.Write' /' Console.WriteLine' и другие методы 'Console' позволяют выводить на консоль, но это очень запутывает то, что вы хотите, поскольку cmd.exe - это командная строка, поэтому она не читает" что-нибудь. –
'main()' не может возвращать сложные объекты, такие как 'DataTable' (он может возвращать' void' или 'int', я считаю). Если вам нужен вывод сложного объекта, который читается другой программой, посмотрите на сериализацию. – Tim
Сохранить как XML. Очень просто. Вам нужно добавить DataTable в Dataset. Затем: DataSet ds = new DataSet(); DataTable dt = new DataTable(); ds.Tables.Add (dt); ds.WriteXml ("filename", XmlWriteMode.WriteSchema); ds.ReadXml ("filename"); – jdweng