2016-06-19 7 views
0

この「コード」を持つcmds.batファイルがあります。バッチコマンドは停止しません

@echo off 
:Ask 
echo What command should I excute? 
echo 1) ncu -g 
echo 2) gem outdated 
echo 3) gem update 
echo 4) pip list --outdated 
echo 5) pip upgrade all packages! 
set INPUT= 
set /P INPUT=Type input: %=% 
If "%INPUT%"=="1" goto cmd1 
If "%INPUT%"=="2" goto cmd2 
If "%INPUT%"=="3" goto cmd3 
If "%INPUT%"=="4" goto cmd4 
If "%INPUT%"=="5" goto cmd5 
:cmd1 
ncu -g 
:end 
:cmd2 
gem outdated 
:end 
:cmd3 
gem update 
:end 
:cmd4 
pip list --outdated 
:end 
:cmd5 
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U 
:end 
:quit 

私は4を押すたびに、それは第四とだけではなく、第四の五のコマンドを実行します。それは私の最も頻度の高いコマンドラインコマンドを実行するために私を求めて単純なツールです。私は間違って何をしていますか?

+3

と置き換えてください。 'end'は何もしません。 goto:quit'または 'goto:eof' –

+1

また、 'if'クエリの後に' goto:quit'を置くことで、ユーザが '1'から' 5'以外の何かを入力するケースも考慮する必要があります。 – aschipfl

+2

各オプションは1つのコマンドしか実行しないので、 ncu.exe -g&goto:EOF'と '%INPUT%" == "2" gem.exeが古くなって&goto:EOF'などのように '%INPUT%" == "1" 。これにより、バッチコードがよりコンパクトになります。 '&'オペランドの詳細については、[Windowsバッチファイルを使用した複数のコマンドでの単一行](http://stackoverflow.com/a/25344009/3074564)の回答を参照してください。 – Mofi

答えて

2

あなたのコードには:endが使用されています。これはコマンドではなく、ラベルであり何もしません。私は場合(ラベルが:eof呼ばれてはならない理由はこれもある)、実際のラベルが:eofと呼ばれる必要はありませんが、単純にファイルの末尾に移動します

@echo off 
:Ask 
echo What command should I excute? 
echo 1) ncu -g 
echo 2) gem outdated 
echo 3) gem update 
echo 4) pip list --outdated 
echo 5) pip upgrade all packages! 
set INPUT= 
set /P INPUT=Type input: %=% 
If "%INPUT%"=="1" goto cmd1 
If "%INPUT%"=="2" goto cmd2 
If "%INPUT%"=="3" goto cmd3 
If "%INPUT%"=="4" goto cmd4 
If "%INPUT%"=="5" goto cmd5 
:cmd1 
ncu -g 
goto :eof 
:cmd2 
gem outdated 
goto :eof 
:cmd3 
gem update 
goto :eof 
:cmd4 
pip list --outdated 
goto :eof 
:cmd5 
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U 
goto :eof 

goto :eofを使用することをお勧めこれはあなたのコード全体ではなく、あなたのバッチファイルで何か他のことをやる必要がある場合は、goto :eofgoto :quit

関連する問題