2016-10-05 18 views
-1

Я пытаюсь создать программу, которая даст мне дерево моего диска C: как файл .txt в пакетном режиме. программа, при запуске, выводит следующее в текстовом файл tree.txt:tree batch - looping output

C:\>cd C:\ 

C:\>tree /a 1>>tree.txt 

C:\>cd C:\ 

C:\>tree /a 1>>tree.txt 

C:\>cd C:\ 

C:\>tree /a 1>>tree.txt 

это очень странно, так как он продолжает печатать на неопределенное время и печатает весь код в файл вместо дерева. Мой код выглядит следующим образом:

cd C:\ 
tree /a >> tree.txt 

любые идеи? Заранее спасибо!

+0

Вы назвали сценарий 'tree.bat', не так ли? – SomethingDark

+0

um ... я должен? – roger

+1

Нет. На самом деле; вы не должны, так как вызов скрипта 'tree.bat' означает, что команда' tree' в вашем скрипте сообщает CMD запускать сценарий вместо команды, которую вы хотели запустить, поскольку CMD смотрит в текущем каталоге, прежде чем он проверяет каталоги перечисленных в переменной%% PATH%. Я пытался убедиться, что у вас нет сценария, который случайно называет себя, что является единственным возможным местом, из которого мог бы возникнуть бесконечный цикл. – SomethingDark

ответ

0

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

1. ВАШ КОД СРЕДСТВО ОТОБРАЖЕНИЕ
По умолчанию, пакетные отображает каждую строку кода, он работает до того, что строка кода выполняется.

Чтобы отключить это, введите команду @echo off в начало вашего скрипта. echo off отключает это поведение, и @ предотвращает отображение этой строки.

2. код выполняется в бесконечном цикле
Поскольку Ваш код состоит из ничего, кроме двух строк в вашем вопросе, единственная возможная причина ваш код должен быть запущен в бесконечном цикле, что ваш сценарий имеет имя tree.bat.

Ваше имя сценария вызывает бесконечный цикл из-за того, как CMD запускает команды. Когда вы вызываете команду и не предоставляете полный путь к этой команде, пакет сначала просматривается в текущем каталоге, а затем во всех каталогах, перечисленных в переменной %PATH%. Поскольку существует исполняемый файл в текущем каталоге с именем tree (ваш скрипт), пакет предполагает, что вы пытаетесь вызвать это и снова запускаете свой скрипт, вызывая бесконечный цикл.

Чтобы остановить это поведение, переименуйте свой сценарий, убедившись, что не называть его чем-либо, что уже является ключевым словом (список партичных слов можно найти here).

0

Если вы действительно хотите назвать дерево пакетных файлов, вы можете установить varhext var в .com.

@echo off & setlocal 
set pathext=.com 
tree C:\ /a>>tree.txt 

Тогда вы не будете рекурсивно называть свой командный файл.

Или просто запустить эту команду и не использовать пакетный файл:

tree C:\ /a>>tree.txt 
+1

Не нужно менять' PATHEXT', просто укажите 'tree.com', а не' tree' ... – aschipfl

 Смежные вопросы

  • Нет связанных вопросов^_^