Как «спрятать» текст из Batch-File? - PullRequest
0 голосов
/ 10 ноября 2018

Я хочу знать, есть ли какое-либо решение для этого:

Main.bat:

@echo off
goto 'input'

: 'input'
cls
set "inp="
set /p inp=What would you like to do?
set firstresponse=%inp:~0,5%
if %firstresponse%==help goto 'help'
pause
if /I %firstresponse%==check set firstresponse=dir && set                             
executeparttwo=%inp:~5%
if /I %firstresponse%==remov goto 'remove'

%firstresponse%%executeparttwo%
pause
goto 'input'

: 'remove'
set "firstresponse=" && set firstresponse=%inp:~0,6%
if /I %firstresponse%==remove set firstresponse=del
set executeparttwo=%inp:~6%
%firstresponse%%executeparttwo%
pause
goto 'input'

: 'help'
cls
echo Check = Dir in regular command prompt, checks a directory.
echo Remove = del in regular command prompt, deletes something.
pause
goto 'input'

если пользователь ввел недопустимую команду, будет показано, что делает CMD («команда» не распознается ...)

Что я хочу сделать, так это заменить текст неверной команды CMD своим собственным, например «команда», это недопустимая команда, но для этого мне нужно «спрятать» CMD (потому что, если пользователь ввел неверный текст) команда не покажет ему «пользовательское сообщение»)

Я пытался использовать некоторые пакетные плагины, такие как batbox, CursorPos и ​​т. Д. ... чтобы заменить позицию курсора, но я не получил то, что хотел. Поэтому, если у кого-то есть решение, я буду очень признателен!

  • Хорошего дня и спасибо за чтение!

1 Ответ

0 голосов
/ 10 ноября 2018

Ваше разделение команды и параметров не является идеальным, есть гораздо более простой и безопасный способ. Кроме того, метод собственной подпрограммы для каждой команды является неоптимальным (особенно, когда вы добавляете все больше и больше команд).

@echo off
call :commandlist  REM build translation table

:input
REM get input line:
set /p "commandline=Enter Command: "
REM split to command and parameters
for /f "tokens=1,*" %%a in ("%commandline%") do (
  set "command=_%%a"
  set "params=%%b"
)
REM check for valid command:
set _|findstr /bi "%command%=" >nul || (
  echo invalid command: '%command:~1%'.
  goto :input
)
REM execute the command:
call %%%command%%% %params%
goto :input

:Commandlist
set "_check=dir /b"
set "_remove=del"
set "_help=:help"
set "_where=call echo %%cd%%"
set "_change=cd"
set "_apt-get=:apt"
set "_bye=exit /b"   'secret' exit command  ;)
goto :eof

:help
echo Check = Dir in regular command prompt, checks a directory.
echo Remove = del in regular command prompt, deletes something.
echo Where = echo %%cd%% in regular command prompt, print working folder.
echo Change = cd in regular command prompt, change working folder
goto :eof

:apt 
if /i "%~1" == "update" echo updating... & goto :eof
if /i "%~1" == "whatever" echo whatevering... & goto :eof
echo invalid command: '%command:~1% %1'
goto :eof

(Примечание для опытных пользователей пакетного режима: да, я знаю, что есть возможность для некоторого "внедрения кода")

...