我想创建一个bat文件,询问用户输入,这将要求一些选择:
@echo off
MKDIR D:\BatFiles\File
SET /P Output="D:\BatFiles\File"
ECHO Select Task
ECHO ==========
@echo off
title Task List Creator
:homescreen
ECHO
Echo 1.) Create Notepad Task File
Echo 2.) Exit
Echo.
set /p input=Type Choice :
if "%input%"=="1" goto getInfo
if "%input%"=="2" exit
Pause
:getInfo
set /p VarOne=Enter Type:
set /p VarTwo=Enter Number:
set /p VarThree=Enter Name:
echo Task Type=%VarOne% >> %Output%\test.txt
echo Task Number=%VarTwo% >> %Output%\test.txt
echo Task Name=%VarThree% >> %Output%\test.txt
echo Entry successfully written
Pause
goto finished
:finished
echo Do you want to create a new set of entry?
set /p response= Y or N?
if "%response%"=="Y" goto getInfo
if "%response%"=="N" goto homescreen
- 此代码的问题是我想创建2个以上的条目。如果用户只有一组条目,则此代码仅创建输出文件。如果用户创建2个或更多,则不会创建输出文件,只有当用户再次运行bat文件并且只输入一组数据时才会显示输入的数据。抱歉这个蹩脚的问题,我只是一个批处理文件初学者。
答案 0 :(得分:0)
看看这段代码:
@echo off
title Task List Creator
setlocal EnableExtensions EnableDelayedExpansion
set "OutputFolder=D:\BatFiles\File"
set FileNumber=0
:HomeScreen
cls
echo Select Task
echo ===========
echo.
echo 1 ... Create Notepad Task File
echo 2 ... Exit
echo.
set "Input=2"
set /P "Input=Your choice: "
if "!Input!"=="1" goto PrepareTaskFile
if "!Input!"=="2" endlocal & goto :EOF
goto HomeScreen
:PrepareTaskFile
set /A FileNumber+=1
set "OutputFile=%OutputFolder%\test%FileNumber%.txt"
if exist "%OutputFile%" del "%OutputFile%"
:GetInfo
echo.
set "VarOne="
set "VarTwo="
set "VarThree="
:EnterType
set /P "VarOne=Enter type: "
if not defined VarOne goto EnterType
:EnterNumber
set /P "VarTwo=Enter number: "
if not defined VarTwo goto EnterNumber
:EnterName
set /P "VarThree=Enter name: "
if not defined VarThree goto EnterName
if not exist "%OutputFolder%" mkdir "%OutputFolder%"
echo Task Type=!VarOne!>>"%OutputFile%"
echo Task Number=!VarTwo!>>"%OutputFile%"
echo Task Name=!VarThree!>>"%OutputFile%"
echo.
echo Entry successfully written.
echo.
pause
echo.
echo Do you want to create a new set of entry?
echo.
set "Response=N"
set /P "Response=Y or N? "
if /I "!Response!"=="Y" goto GetInfo
goto HomeScreen
如果用户只需点击 RETURN 或 ENTER ,则提示符上的环境变量将保持其当前值。因此,建议在提示用户之前定义默认值或取消定义变量。
如果用户输入了可能导致语法错误的内容,并因此在引用输入字符串时立即展开退出批处理,则使用延迟扩展来引用分配给变量的输入字符串。例如,如果用户输入带双引号的字符串,则字符串比较将失败并出现语法错误。
请参阅How to set environment variables with spaces?为什么使用双引号,因为可以在set "variable=string value"
和set /P "variable=prompt text"
上看到。
问题代码中重定向运算符>>
左侧的空格字符也将写入文件中。如果变量值是一个值为1,2,3,...的数字,则应该通过删除它并引用具有延迟扩展的变量来避免这种情况,以避免错误的句柄重定向,请参阅Microsoft文章{{3} }。
对于菜单而不是命令set /P
使用choice
时,必须始终考虑用户输入未建议的内容。因此,如果用户首先提示是1
还是2
,则必须有代码来定义无效输入的行为。
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
cls /?
del /?
echo /?
endlocal /?
goto /?
if /?
mkdir /?
pause /?
set /?
setlocal /?
title /?
另请参阅Using command redirection operators上的答案,了解&
与endlocal
之间goto :EOF
的解释。