バッチスクリプトでどのようにパラメータを操作するかを学び、引数を読み込むためのテンプレートを作成しましたそしてその後、私はフラグなしで各フラグの機能(arg_/flag
)と引数のための1つを作成するパラメータ最後の引数の前方スラッシュは、バッチファイル( "%〜dp0")のディレクトリへのパスを変更させます
@echo off
SetLocal EnableDelayedExpansion
set needextra=
set errstat=
set noflag=
set param_f=Not set yet
set param_g=You didn't use G-flag
:readARGS
IF [%1] == [] goto :endARGS
call :arg_%1 2> nul
IF ERRORLEVEL 1 call :arg_default %1
SHIFT
IF DEFINED needextra (
set %needextra%=%~1
SHIFT
set needextra=
)
goto :readARGS
:endARGS
echo path to directory of batch script: %~dp0
echo - noflag: !noflag!
echo - param_f: !param_f!
echo - param_g: !param_g!
EndLocal
exit /b 0
ディレクトリを表示します最初のエコーは私の質問のために重要である(後述) (arg_default
)を設定します:
:arg_/f -- flag f: set param_f to value of next argument
set needextra=param_f
exit /b 0
:arg_/g -- flag g: just set the param_g to a value
set param_g=You used the G-flag
exit /b 0
:arg_default -- default, neither flag f or g: just set the noflag
echo noflag=%~1
exit /b 0
> params "just an arg"
path to directory of batch script: C:\Users\user\scritpts\
- noflag: just an arg
- param_f: Not set yet
- param_g: You didn't use G-flag
> params another /G /F "this is f"
path to directory of batch script: C:\Users\user\scritpts\
- noflag: another
- param_f: this is f
- param_g: You used the G-flag
私は機能にそれを置くことは私がどんな順番でパラメータを入力することができます:私は、バッチファイル内のすべてを置くとき、私は、スクリプトを実行できるのは、C:\Users\user\scripts\params.bat
を言わせて、パスにディレクトリを置きます私は望むが、私は最後としてG-フラグを置く場合、私はこの奇妙な振る舞いを取得:
> params /F "this is f again" bizar /G
path to directory of batch script: C:\
- noflag: bizar
- param_f: this is f again
- param_g: You used the G-flag
のみC:\
%~dp0
戻ります!私は他のパラメータでそれを試して、別のディレクトリにバッチファイルを移動し、ディレクトリ内でそれを呼び出すと、%~dp0
はC:\
だけを返し続けました。実際には毎回最後の引数は、「/」%~dp0
は、この例のように「奇妙な」振る舞います含まれています。なぜこれが起こっている
> params /G /F stranger "what happens /here"
path to directory of batch script: C:\Users\user\script\what happens \
- noflag: what happens /here
- param_f: stranger
- param_g: You used the G-flag
は、誰かが私に説明していただけますか?私は理由を理解することができず、ウェブ上で何かを見つけることもできませんでした。私はWindows 10を使用しています。
本当にありがとうございます。
あなたの完全な説明をありがとう!私はespaciallyあなたの 'SHIFT/1'ソリューションが好きです。 –