%~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 并不存在。