批处理文件:根据另一个子字符串的存在提取子字符串

时间:2012-05-17 04:09:08

标签: batch-file

我正在向批处理文件发送各种参数。在那里我需要" -l"旁边的参数; ..

例如:调用.bat

Test.bat sampl.exe -s ssss -m mmmm -l path -k kkkk -d dddd

在此我需要接触"路径"基于-l的存在。通常,我需要将下一个参数提取到" -l"。我有办法做到吗?请帮忙

2 个答案:

答案 0 :(得分:1)

下面有一个像这样的批处理文件的标准代码。如果变量名称与开关相同,即set s=ssss set l=path等,则代码更简单。

@echo off
if "%1" neq "" goto getParams
rem A simple description of how to use this Batch file goes here, ie:
echo Test.bat progname [-s ssss] [-m mmmm] [-l path] [-k kkkk] [-d dddd]
goto :EOF

:getParams
rem Set here default parameter values, ie:
for %%a in (s m l k d) do set %%a=
set progName=%1
:shift
shift
for %%a in (s m l k d) do if /I "%1" equ "-%%a" goto getParam
goto main

:getParam
set %1=%2
shift
goto shift

:main
rem Run here the program, ie:
cd %l%
%progName% %s% %m% %k% %d%

我希望它有所帮助...

答案 1 :(得分:0)

想法是循环遍历参数列表,如果找到-l,则调用另一个部分,然后提取下一个参数。

SHIFT,从可用参数列表中删除第一个参数。例如:

如果您运行:sampl.exe -s ssss -m mmmm -l path -k kkkk -d dddd

可用的参数是= -s ssss -m mmmm -l path -k kkkk -d dddd \

如果在脚本中你执行了SHIFT,那么可用的参数将是= ssss -m mmmm -l path -k kkkk -d dddd

请参阅下面的代码示例:

@ECHO OFF

SET path=
SET mmm=
SET sss=
SET ddd=

REM Loop through passed parameters
:LOOP
IF [%1]==[] GOTO LOOP_END
    IF [%1]==[-s] @CALL :PROCESS_S %2
    IF [%1]==[-m] @CALL :PROCESS_M %2
    IF [%1]==[-l] @CALL :PROCESS_L %2
    IF [%1]==[-d] @CALL :PROCESS_D %2
    SHIFT
GOTO LOOP
:LOOP_END


REM call your actual end result here.. Once the batch file gets here, the variable path would have been set if there was a -l <my path> passed, otherwise it would be empty
cd %path%
runmyprogram.exe %sss% %mmm% %ddd%  

GOTO:EOF


REM Define your methods down here.
:PROCESS_S
    IF [%1]==[] GOTO:EOF
    SET sss=%1
    SHIFT
    GOTO:EOF

:PROCESS_M
    IF [%1]==[] GOTO:EOF
    SET mmm=%1
    SHIFT
    GOTO:EOF

:PROCESS_L
    IF [%1]==[] GOTO:EOF
    SET path=%1
    SHIFT
    GOTO:EOF

:PROCESS_D
    IF [%1]==[] GOTO:EOF
    SET ddd=%1
    SHIFT
    GOTO:EOF