0

我正在开发一个批处理聊天程序……因为它很有趣……但是我遇到了一个问题。

我希望用户能够聊天,或使用来自同一提示的命令,并且此方法有效:

set /p m=Message: 
set tm="%m%"
if %tm% == "KICK" goto kick
echo %time% ^<%u%^>: %m% >> %log%

但是,要使命令正常工作,我需要在批处理文件的其他位置执行另一个步骤:

:kick
set /p person=Who to kick? 
del %dir%\%person%

我怎样才能让某人只需键入“KICK John”就可以踢某人?

4

2 回答 2

0

好吧,你可以试试这个:

Setlocal Enableextensions
set /p m=Message: 
set tm="%m%"
if /i %m:~0,4% == "KICK" call kick "%m:~4%"
echo %time% ^<%u%^>: %m% >> %log%

:kick
del %dir%\%1
goto :eof

我对这种批处理脚本不太熟悉(我通常使用 C#),但这应该可以正常工作。告诉我它是否不起作用,以及错误消息。还有其他方法可以做到这一点。

莫娜

于 2013-09-18T23:45:29.913 回答
0
set /p m=Message: 
set tm=%m%
if /i "%tm:~0,4%"=="KICK" goto kick
echo %time% ^<%u%^>: %m% >> %log%


:kick
set person=%tm:~5%
if not defined person set /p person=Who to kick? 
if not defined person goto kick
del %dir%\%person%

当然,决赛的目的地标签if not defined是有争议的。


修复:删除引号周围%m%


附加 20130924T0736Z

这是我的测试批次:

:: @ECHO OFF
SETLOCAL
SET u=whatever
SET log=u:\log.log

set /p m=Message: 
set tm=%m%
if /i "%tm:~0,4%"=="KICK" goto kick
echo %time% ^<%u%^>: %m% >> %log%

TYPE %log%
GOTO :eof

:kick
set person=%tm:~5%
if not defined person set /p person=Who to kick? 
if not defined person goto kick
ECHO del %dir%\%person%
GOTO :EOF

并运行报告:

>SETLOCAL

>SET u=whatever 

>SET log=u:\log.log 

>set /p m=Message:  
Message: 
>set tm=Hello Friend :P 

>if /I "Hell" == "KICK" goto kick 

>echo 15:33:12.77 <whatever>: Hello Friend :P  1>>u:\log.log 

>TYPE u:\log.log 
15:33:12.77 <whatever>: Hello Friend :P 

>GOTO :eof 

所以 - 鉴于我不知道你的设置是什么,或者u碰巧是什么,并且它对我有用,如上所示,我只能得出结论,在你的代码的其余部分中需要引号 - 你没有没有显示。logdir

没有禁止使用您的报价 - 一旦确定“踢”的存在,所以

set tm="%m%"

直接在该IF /i...行之后应该可以解决您的问题。

于 2013-09-19T00:45:42.103 回答