batch-file - 用户输入文本时批处理文件不断崩溃
问题描述
我一直在努力让这段代码工作......
我试过重新做代码......也无济于事,下面的代码有点大......
:ST
if exist password.txt goto login
if not exist password.txt goto signup
:login
set /p user=<username.txt
set /p pass=<password.txt
set /p answer=Username:
if %answer% = %user% goto p1
if NOT %answer% = %user% goto errlog111
exit
:p1
set /p answer=Password:
if %answer%=%pass% goto
if NOT %answer% = %pass% goto errlog111
echo success
pause
exit
:signup
title Username needed for account creation! / Newex / Unregistered
set /p answer=Username:
echo %answer% > username.txt
cls
set /p answer=Password:
echo %answer% > password.txt
cls
echo Account created!
goto login
exit
:errorlog111
echo Username / Password incorrect!
pause
goto login
所以,我想要它检查用户输入的密码.txt(或用户名.txt)的内容,如果用户输入正确的内容,它会继续下一步。但是,如果他们得到密码或用户名错误,那么我希望它说“用户名/密码错误!” 但是由于某种原因,当我输入用户名时,批处理文件就关闭了!请帮忙!
解决方案
if %answer% = %user% goto p1
正确的语法是使用==
or EQU
。
更好的语法是
if "%answer%" == "%user%" goto p1
- 引号可以防止一些非法输入,并且参数包含某些字符,例如
,
;
字符串之间的任何比较。
请注意,if /i ...
使比较不区分大小写(供将来参考)
另外 - 一个很难看到的错误
echo %answer% > username.txt
将在文件中包含answer值后面的空格
> username.txt echo %answer%
不会包括这个(大概)不需要的空间。
推荐阅读
- docker - 在 kapacitor 中运行 udf 时出现意外的 EOF 错误
- reactjs - 如何在 reactjs 中模拟一个承诺?
- amazon-web-services - 无法从 ASP.NET Hangfire 连接到 AWS RDS 数据库
- javascript - 谷歌电子表格 - 根据另一个单元格的内容将日期添加到单元格
- java - Spring 与石英和 jpa 事务
- azure-data-lake - Azure 数据湖 - 数据安全性和合规性
- google-analytics - BigQuery 中的谷歌分析实时数据
- angular - 无法在 Angular 6 中读取 null 的属性“出口”
- php - CodeIgniter 中 update_batch 的多个 WHERE 条件问题
- javafx - JavaFX 和 FXML。组合框中的嵌套列表