Использование переключателей внутри командного файла - PullRequest
0 голосов
/ 07 августа 2010

У меня есть пакетный файл, и мне нужно вызвать его как этот «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, и все работает нормально, но я хочу читать по параметру. Это возможно?

Ура!

Ответы [ 3 ]

4 голосов
/ 07 августа 2010

Я не совсем уверен, что вижу вашу проблему.%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.

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

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

0 голосов
/ 07 августа 2010

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

0 голосов
/ 07 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...