2017-09-21 11 views
0

バッチスクリプトで2つのことを行いたいとします。1つのパラメータまたは他のパラメータを使用すると指定したファイルをバッチで使用する

最初のパラメータは1つのパラメータまたはそれ以外のパラメータのみを使用します。つまり、次のようになります。

C:\> foo.bat file.txt /A 
/A commands here. 

C:\> foo.bat file.txt /B 
/B commands here. 

C:\> foo.bat file.txt /A /B 
ERROR: Either /A or /B can be specified only. 

C:\> foo.bat file.txt /B /A 
ERROR: Either /A or /B can be specified only. 

そして、2番目のコマンドは、指定されたファイルを使用してコマンドを実行します。つまり、次のようになります。

C:\> bar.bat file.txt /A 
file.txt has been archived. 

私はこれを行うためのコードを書こうとしましたが、あまりにも遠くはありません。ここに私の仕事はこれまでです:

if /i [%~f1] == [FILE] set usedfile=[FILE] 
if /i [%1] == [] goto error 
if /i [%2] == [/A] set "A_or_B=A" 
if /i [%2] == [/B] set "A_or_B=B" 

そして%usedfile%がちょうどcopyで別の場所にコピーされます。

+0

開始方法がわからない場合は、https://ss64.com/nt/syntax-args.htmlとhttps://ss64.com/nt/if.htmlを読んでください(続き)。 – JosefZ

+0

これには、cmdスクリプト(.batファイル)コードを記述する必要があります。 PowerShellでパラメーターセットを使用することで、相互排他を自由に得ることができます。 – lit

+0

助けてくれてありがとう。だから私はもう少し手に入れました。これまでのコードに元の質問に自分のコードを追加しました。 – ditheredtransparency

答えて

1

最初のパラメータはファイル名である必要がありますが、私はあまりよく分かりません。これはあなたに近づくはずです。

C:>TYPE asdf.bat 
@ECHO OFF 
SETLOCAL 
SET EXITCODE=0 

if /i [%~f1] == [FILE] set usedfile=[FILE] 
if /i [%1] NEQ [] (SET "usedfile=%~1" & GOTO NextSwitch) 
ECHO ERROR: File not specified. 
SET EXITCODE=1 
GOTO TheEnd 

SET "OPT_A=" 
SET "OPT_B=" 
:NextSwitch 
IF [%2] EQU [] (GOTO SwitchesDone) 
if /i [%2] == [/A] (
    IF [%OPT_B%] NEQ [true] (SET "OPT_A=true") ELSE (GOTO SwitchError) 
) 
if /i [%2] == [/B] (
    IF [%OPT_A%] NEQ [true] (SET "OPT_B=true") ELSE (GOTO SwitchError) 
) 
if /i [%2] == [/B] set "OPT_B=true" 
SHIFT 
GOTO NextSwitch 

:SwitchError 
ECHO ERROR: Either /A or /B can be specified only. 
SET EXITCODE=2 
GOTO TheEnd 

:SwitchesDone 
ECHO NB: usedfile is %usedfile% 
ECHO NB: OPT_A is %OPT_A% 
ECHO NB: OPT_B is %OPT_B% 

:TheEnd 
EXIT /B %EXITCODE% 

ここにいくつかの実行があります。

21:30:52.27 C:\src\t 
C:>asdf.bat adsf /B /A 
ERROR: Either /A or /B can be specified only. 

21:31:01.01 C:\src\t 
C:>asdf.bat adsf /A 
NB: usedfile is adsf 
NB: OPT_A is true 
NB: OPT_B is 
+0

はい、最初のパラメータは有効なファイルである必要があります。私はまだ完全にコードを読んでいないが、私はそれを試してみたが、それは期待どおりに動作しているようだ!私は私の結果に戻ることができるときに私は戻って報告します。 – ditheredtransparency

関連する問題