Как записать вывод команды cmd tree с помощью задачи Apache Ant exec?

Я пытаюсь зарегистрировать вывод команды дерева cmd, используя ant, со следующим:

    <exec dir="${basedir}" executable="cmd" output="output.txt">
        <arg value="tree" />
    </exec>

Однако в «output.txt» я вижу следующее:

    Microsoft Windows XP [Version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.

Когда я запускаю команду в Windows cmd:

    C:\tree>tree 

Я получаю что-то вроде:

    C:\tree
        └───test
            └───test

Может ли кто-нибудь сказать мне, как написать сценарий Ant для печати древовидной структуры в файл?

См. также:  Почему срабатывает мое окно времени обработки, а время события - нет
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. S.N

    Вы пытаетесь выполнить tree.com. Из документации exec:

    […] В частности, если вы не поместите расширение файла в исполняемый файл, будут искаться только файлы «.EXE», а не «.COM», «.CMD» или другие типы файлов, перечисленные в переменной среды PATHEXT . Это используется только оболочкой.

    Вам нужно вызвать tree.com явно.

    <exec dir="${basedir}" executable="tree.com" output="output.txt" />
    

    Другой способ — указать параметр /C для cmd, вот что сработало для меня:

    <exec dir="${basedir}" executable="cmd" output="output.txt">
        <arg value="/C" />
        <arg value="tree" />
    </exec>
    

    Я думал о том, чтобы предложить cmd /c, но подумал, что было бы излишне вызывать оболочку только для вызова консольной программы. Не знал, что муравей игнорирует PATHEXT :-) person S.N; 10.05.2010

  2. S.N

    (Угадайте, я не пользователь Ant)

    Если бы вы напечатали

    cmd tree
    

    в командной строке вы также не увидите больше, чем

    Microsoft Windows [Version 6.1.7600]
    Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
    

    Как насчет того, чтобы просто выполнить tree?

    <exec dir="${basedir}" executable="tree" output="output.txt"/>  
    

    +1 tree — это обычное приложение командной строки (tree.com), а не встроенная команда, поэтому нет необходимости вызывать cmd person S.N; 10.05.2010

    Ну, я получаю следующую ошибку с предложенным подходом: Не удается запустить дерево программ: CreateProcess error=2, Система не может найти указанный файл. person S.N; 10.05.2010

    Возможно, вам придется немного изменить его. TREE [диск:][путь] [/F] [/A] Итак, исполняемый файл=TREE ${basedir} person S.N; 10.05.2010

    Или даже executable=TREE ${basedir} › ${basedir}\output.txt person S.N; 10.05.2010

    Спасибо, но я получаю ту же ошибку. Не удается запустить дерево программ C:\tree: CreateProcess error=2. Система не может найти указанный файл. person S.N; 10.05.2010

    @Johannes: Если бы я знал, насколько близок был ваш ответ, когда я опубликовал свою первую версию, я бы просто добавил комментарий к вашему :) person S.N; 10.05.2010

    @Питер: я не против. Я все равно был в неправильном положении, чтобы дать правильный ответ. То, что касается расширения, безусловно, является причудой, о которой нельзя знать, если вы не используете Ant ;-) (на самом деле, я все еще считаю это глупым, но, эй, Windows, вероятно, одна из самых странных платформ для поддержки). person S.N; 10.05.2010

    @Johannes: на самом деле я не знал об этом ограничении, наткнулся на эту часть документации при поиске причины :) person S.N; 10.05.2010

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: