Caleb Rocca
Caleb Rocca

Reputation: 21

Only use first word of input batch file

I am making a program that needs to run the commands that users put in. If the command doesn't exist it opens an error.

:cmd
set /p cmd="Command:"
if not exist %cmd% goto nocommand
%cmd%

:noCommand
echo Error, command doesn't exist..
goto cmd

But if I type "echo text" it says text isn't a command. I need it to only read the first word.

Upvotes: 2

Views: 928

Answers (2)

npocmaka
npocmaka

Reputation: 57332

Checks if its is possible to execute the command as an internal,from given path or from %PATH%. It uses also solution from dbenham from here : Check if command is internal in CMD

@echo off
:cmd
set /p "cmd=Command:"
        for /f "tokens=1 delims= " %%a in ("%cmd%") do set "fcmd=%%~na"

        setlocal
        set "empty=%temp%\empty%random%"
        md "%empty%"
        pushd "%empty%"
        set path=
        >nul 2>nul %fcmd% /?
        if not errorlevel 9009 (
            popd
            rd "%empty%"
            echo %fcmd% is internal command
            endlocal
            goto :execute
        ) else (
            popd
            rd "%empty%"
            endlocal
        )

color


for %%# in (%PATHEXT%;"" ) do (
    rem echo --%fcmd%%%~#--
    if exist %fcmd%%%~# (
        echo the command/executable/script will be executed from given location
        goto :execute
    )

    for /f  "tokens=1 delims= " %%a in ("%fcmd%%%~#") do (

        if "%%~$PATH:a" NEQ "" (
            echo the command/executable/script is defined in %%PATH%%
            rem
            goto :execute
        )
    )

)

echo command does not exist
exit /b 1

:execute

%cmd%

Upvotes: 1

Loïc MICHEL
Loïc MICHEL

Reputation: 26180

set /p cmd="Command:"
for /f "tokens=1" %%i in ("%cmd%") do set firstword=%%i
echo %firstword%

Upvotes: 0

Related Questions