我们可以跳过(%*) 中的参数吗?

我们可以跳过(%*) 中的参数吗?

%~1我怎样才能跳过像在中的论点%*

@echo off
title  
cls
:loop
set /p command=
call :command %command%
goto :loop
:command
if "%~1"=="title"(
  %~1 %*
)
goto :eof

我正在尝试在那里创建自己的 cmd。

但是我有一个问题:当我尝试设置我的 cmd 的窗口标题时,输出是:

title test title

或者当我创建一个echo命令时,输出是:

echo test echo command

也就是说,命令本身也在输出里面。

我们可以跳过%~1%*

或者我应该使用任何其他命令?

答案1

如果目标是将分隔字符串拆分成标记,包括像这里一样,将第一个分隔标记与字符串的其余部分分离,那么 FOR /F 会更加灵活和实用。

@echo off
title  
cls
:loop
set /p command=
for /f "tokens=1* delims= " %%A in ("%command%") do if /I "%%~A"=="title" %%A %%B
goto :loop

答案2

您可以使用直接批处理行解释,如下所示:

@echo off
title  
cls
:loop
set /p command=
call :command_%command%
goto :loop


:command_title
title %*
exit /b

例如,如果用户输入“ title this is the name of the window”,则批处理执行以下操作:call :command_title this is the name of the window。 %* 内部:command_title只包含额外的参数,因此从这个意义上讲 %1 并不存在。

相关内容