2015-12-17 48 views
-1

我想創建一個批處理文件,用於回顯它作爲用戶輸入命令的一部分接收到的文本。在用戶輸入中測試並刪除子字符串

@echo off 
Echo execute a command 
Set /p command= 
if "%command%"=="echo 'some text'" goto echo 
::my aim is to make "echo" ignored by System and Only read "'some text'" 
:: like "set text_to_echo='some text' 
:echo 
echo %text_to_echo% 

首先詢問該命令的用戶,然後詢問是否重複一下,像下面的用戶,是不是一種選擇

@echo /p 
set /p text= 
if "%text%=="echo" 
:echo 
set /p tex1="Enter text to echo" 
echo "%tex1%" 
+0

是否有其他原因可以刪除命令?否則,您可以直接使用%命令%變量來執行回顯。 – Squashman

+0

我不明白這個的措辭,你希望能夠鍵入一個命令,並讓它只回應排除任何前導'echo'的命令? – Bloodied

回答

0

您可以使用此:

@echo off 
Echo execute a command 
Set /p "command=" 
if NOT "%command%"=="%command:echo =%" goto echo 
pause 
:echo 
SET "text_to_echo=%command:~5%" 
echo.%text_to_echo% 
pause 

注我還修復了您的if,並在您的if之後加上了pause,這樣您就知道它是否會轉到:echo

+0

可能會更好地對變量進行子串處理。如果有人想要回顯OFF或ON字樣,該怎麼辦?要做到這一點的唯一方法是在迴音之後有一個字符,如句號或斜線。 'echo \ off'如果有人想ECHO echo這個詞,那麼它什麼都不會迴應。 – Squashman

+0

採取點編輯。 –

+0

我的想法是隻使用FOR/F並使用TOKENS = 1 *分隔空間。這樣,命令將在第一個標記中,其他所有內容都將在第二個標記中。但是,如果有人輸入'echo.Hello',那當然不起作用。這個練習可能會有點棘手。不知道爲什麼這個人想要提取命令時,他們所需要做的就是將命令變量放在一行上來執行命令。 – Squashman

0

你想將你的輸入分成第一個單詞(令牌)和其餘。您可以使用for來執行此操作:

@echo off 
Echo execute a command 
Set /p "commandstring=# " 
for /f "tokens=1,* delims= " %%a in ("%commandstring%") do (
    set "command=%%a" 
    set "params=%%b" 
) 
if /i "%command%"=="echo" goto :_echo 
... 
:_echo 
echo %params% 
REM also possible (at least for "echo", but I guess, that's just an example): 
%command% %params% 
+0

你搖滾樂隊! –

相關問題