2012-05-21 4 views
1

Я работаю над пакетным файлом для использования в качестве обертки для некоторых модулей обработки данных, которые уже написаны, с целью возможности запуска некоторых из них параллельно и других по мере необходимости/обработки власть позволяет. В базовых модулях требуется один вход (путь, содержащийся в двойных кавычках), и необязательно другой путь, содержащийся в двойных кавычках и/или набор флагов, и я пытаюсь выяснить, как тестировать эти входы. Я в настоящее время имеюПакетный файл: разбор входных команд командной строки

:TEST_PARAMS 
REM Make sure parameters are correct; if not, display a usage message 
IF NOT "%1"=="" (SET SUBBASENAME=%1 
) ELSE (
    GOTO :USAGE 
) 
IF NOT "%2"=="" (SET ATLASBASENAME=%2 
) ELSE (
    SET ATLASBASENAME=%DEFAULTATLAS% 
) 
IF NOT "%3"=="" (SET FLAGS=%3 
) ELSE (
    SET FLAGS="" 
) 
GOTO :START_SVREG 

Это, кажется, все правильно разбирает, если что-то вводится в правильном порядке. Тем не менее, я также хотел проверить, будут ли флаги (которые будут предикатами '-') появляться в качестве первого или второго входов, а если они есть, отображать сообщение об использовании/задавать переменные правильно по мере необходимости. Я решил, что самый простой способ сделать это - посмотреть, является ли первый символ этих строк «-», но я не могу найти способ сделать это. Я нашел фрагмент кода, который проверяет, содержит ли строка определенную подстроку, заменяя подстроку пустыми строками, а затем видя, является ли результирующая строка такой же, как у оригинала, но это не сработает, поскольку люди могут иметь законные символы в другом месте по их пути. Есть ли способ проверить, соответствует ли первый символ строки заданному символу в пакетном файле, или лучший способ делать то, что я хочу?

ответ

1

Вы. может передать аргумент в переменную окружения, а затем использовать SET подстроки операцию, чтобы посмотреть на первый символ. (тип HELP SET из командной строки, чтобы получить информацию о подстроку операциях)

@echo off 
set "var=%~1" 
if defined var if "%var:~0,1%" equ "-" echo arg 1 is a flag 
0

Вам действительно не нужно проверять «-» в любом аргументе командного файла, поскольку в качестве создателя пакетного файла вы будете знать, какие команды могут быть обработаны или нет. Значит, если вы используете «-b», то знаете, как его обрабатывать или если пользователь прошел «-t», вы будете знать, как обрабатывать. В вашем пакетном файле вам просто нужно обработать все аргументы, независимо от того, в каком порядке они находятся, и в вашем пакетном файле у вас будут разделы для его обработки. Ниже приведен пример пакетного файла, который может обрабатывать любое количество аргументов с «-» или «/» используется с ними:

@echo off 

if [%1]==[] goto usage 
:CHECKFORSWITCHES 
@echo Execute the Command 
IF '%1'=='/param1' GOTO PARAM1 
IF '%1'=='-param2' GOTO PARAM2 
IF '%1'=='/param3' GOTO PARAM3 
IF '%1'=='-param4' GOTO PARAM4 
IF '%1'=='/param5' GOTO PARAM5 
goto :eof 

:PARAM1 
@echo This is Param1 
set var=%1 
set var2=%var:~0,1% 
echo %var2% 
SHIFT 
goto :CHECKFORSWITCHES 
:PARAM2 
@echo This is Param2 
SHIFT 
goto :CHECKFORSWITCHES 
:PARAM3 
@echo This is Param3 
SHIFT 
goto :CHECKFORSWITCHES 
:PARAM4 
@echo This is Param4 
set var=%1 
set var2=%var:~0,1% 
echo %var2% 
SHIFT 
goto :CHECKFORSWITCHES 
:PARAM5 
@echo This is Param5 
SHIFT 
goto :CHECKFORSWITCHES 
:usage 
@echo Usage: %0 ^<Write your command here^> 
exit /B 1 

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

выше, если вам нужно написать определенную логику, основанную на «-» или «/», просто использовать IF% var2% == '/»GOTO XXX, и вы можете делать все, что вы ищете

+0

Спасибо за ответ. Я m, используя командный файл как своего рода интерфейс для модулей, которые были скомпилированы с помощью Matlab, поэтому он фактически ничего не делает с флагами - он просто передает их, если они присутствуют. Ea ch выполняет свою собственную проверку, но я надеялся, что сможет проверить их до их вызова, так что пользователь не будет заполнен сообщениями об использовании. – ackrause

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