さまざまなパラメーターをバッチ ファイルに送信しています。その中で、「-l」の横にパラメーターが必要です..
例: .bat を呼び出す場合
Test.bat sampl.exe -s ssss -m mmmm -l パス -k kkkk -d dddd
これでは、-l の存在に基づいて「パス」を抽出する必要があります。一般に、次のパラメーターを「-l」に抽出する必要があります。私ができる方法はありますか?助けてください
さまざまなパラメーターをバッチ ファイルに送信しています。その中で、「-l」の横にパラメーターが必要です..
例: .bat を呼び出す場合
Test.bat sampl.exe -s ssss -m mmmm -l パス -k kkkk -d dddd
これでは、-l の存在に基づいて「パス」を抽出する必要があります。一般に、次のパラメーターを「-l」に抽出する必要があります。私ができる方法はありますか?助けてください
以下に、このようなバッチ ファイルの標準コードを示します。変数名がスイッチと同じであれば、コードはさらに単純になります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%
それが役立つことを願っています...
パラメータのリストをループし、-lが見つかった場合は、別のセクションを呼び出して次のパラメータを抽出するという考え方です。
SHIFTは、使用可能なパラメーターのリストから最初のパラメーターを削除します。例えば:
実行した場合:sampl.exe -s ssss -m mmmm -l path -k kkkk -d dddd
使用可能なパラメーターは次のようになります=-sssss -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