2010-08-06 2 views
0

У меня есть командный файл, и мне нужно вызвать его так: «mybatch.bat -r c: \ mydir», а командный файл проходит через каталог и записывает имена файлов в вывод. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу прочитать параметр «-r».Использование переключателей внутри пакетного файла

Вот как это выглядит:

@echo off 
echo [%date% %time%] VERBOSE START 
for %%X in (%1\*.xml) do echo [%date% %time%] VERBOSE systemmsg Parsing XML file '%%X' 
echo [%date% %time%] VERBOSE END 

Я могу однако использовать% 2 вместо% 1 и все работает отлично, но я хочу, чтобы читать с помощью параметра. Это возможно?

Cheers!

ответ

4

Я не совсем уверен, что вижу вашу проблему. %1 в этом случае, очевидно, -r, а вы должны использовать %2, который является c:\mydir.

Если вы имеете в виду вы хотите, чтобы убедиться, что пользователь указывает -r первый, вы можете использовать что-то вроде:

@echo off 
if not "x%1"=="x-r" (
    echo [%date% %time%] ERROR Called without -r 
    goto :eof 
) 
echo [%date% %time%] VERBOSE START 
for %%X in (%2\*.xml) do echo [%date% %time%] VERBOSE systemmsg Parsing file '%%X' 
echo [%date% %time%] VERBOSE END 

Если -r является опциональный, вы часто можете сделать:

set fspec=%1 
set rflag=no 
if "x%fspec"=="x-r" (
    set fspec=%2 
    set rflag=yes 
) 

, а затем использовать rflag и fspec.

Выполнение синтаксического анализа параметров, не зависящих от позиции, не является легкой задачей. У нас есть подсистема, которая делает это, но, к сожалению, она является собственностью. I будет сказать вам, что он проходит через около 80 с лишним линий и не является самым быстрым зверем в мире.

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

+0

Выглядит отлично. Спасибо за совет! – ostati

0

Почему вы не можете назвать свой пакетный файл просто как mybatch.bat c:\mydir, а затем просто оцените %1, и все будет сделано?

+0

Я пишу модульные тесты, чтобы имитировать то, что делает настоящая команда, как мне нужно читать и анализировать выходные данные. Благодаря! – ostati

0

Если единственная цель пакетного файла - записать имена файлов для вывода, не можете ли вы просто использовать dir /b /s?

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