2016-06-19 3 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 он выполняет 4-й и 5-й команды, а не только четвёртым. Что я делаю не так?

+3

': end' ничего не делать, вы должны заменить его на' goto: quit' или 'goto: eof' –

+1

Вы также должны рассмотреть случай, когда пользователь вводит что-то еще, кроме '1',' 5', помещая 'goto: quit' после запросов' if', например ... – aschipfl

+2

Поскольку каждый параметр выполняет только одну команду, I предложите использовать 'If '% INPUT%" == "1" ncu.exe -g & goto: EOF' и 'If"% INPUT% "==" 2 "gem.exe устаревшее & goto: EOF' и т. д. , Это делает пакетный код более компактным. Подробнее о '&' operand см. Ответ на [Одинарная строка с несколькими командами с использованием пакетного файла Windows] (http://stackoverflow.com/a/25344009/3074564). – Mofi

ответ

2

Вы используете в своем коде :end, который не является командой, а скорее ярлыком и ничего не делает. Я предлагаю использовать

@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 не нужен фактический лейбл под названием :eof, но будет просто перейти в конец файла (это также, почему вы не должны иметь ярлык под названием :eof)

Если это не весь код, и вы все еще нужно сделать что-то еще в вашем пакетном-файле, вы можете использовать свой :quit этикетку и заменить goto :eof с goto :quit

Смежные вопросы