如何使用批处理从前缀和随机后缀中获取输入



cmd中要问的问题,

what is your name?

用户输入,

my name is John

我的代码,

set /p "username=what is your name? "
if "%username%"=="my name is * " goto save
echo Invalid input && exit
:save
echo %username%>username.txt

预期输出,

要保存在username.txt中的John

只有用户名必须保存在文件username.txt中。但是,用户输入必须像my name is "there name here"

所以,名字可以是任何东西,所以,我用了*,似乎不是工作。请帮我修复代码

如果你正在做我认为你正在做的事情,不要:),你会给自己带来很多挫折。无论如何如果你确定了,那么设置一个不是名字的单词列表,然后通过删除其中的所有单词来替换字符串。示例:

@echo off
set "badwords=i my name is am"
set /p "you=what is your name?"
set "you=;%you: =;%"
for %%i in (%badwords%) do call set "you=%%you:%%i;=%%"
set you=%you:;= %
echo %you:~1% & (echo %you:~1%)>users.txt

这个例子将从以下句子中去掉这个名字,无论是在任何情况下,还是按照任何顺序:

I am John
my name is John
I AM JOHN
MY NAME IS JOHN
John is my name
john is I
John I am

很明显,您可以扩展您的单词列表以排除任何其他单词。

我不会使用username作为变量,因为它已经被Windows使用了。

@ECHO OFF
:TryAgain
SET /P "NAMEINPUT=what is your name? "
FOR /F "tokens=1,2,3,*" %%A in ("%NAMEINPUT%") DO (
IF /I "%%A" == "my" IF /I "%%~B" == "name" IF /I "%%~C" == "is" (
SET "THENAME=%%~D"
) ELSE (
GOTO TryAgain
)
)
ECHO THENAME is now "%THENAME%"
ECHO>username.txt %THENAME%
EXIT /B 0

if不支持通配符。解决方法:

set /p "uname=what is your name? "
echo %uname%|find /i "my name is ">nul &&goto :save
echo invalid
goto :eof
:save
echo %uname:my name is =%>username.txt
@ECHO Off
SETLOCAL
:again
set "uname="
set /p "uname=what is your name? "
if not defined uname goto :eof
if /i "%uname:~0,11%" == "my name is " goto save
echo Invalid input
goto again
:save
set "uname=%uname:~11%"
echo %uname%
GOTO :EOF

我会回应@lit的评论。。。

最新更新