.Bat代码仅为输入的一组数据创建文件

时间:2016-07-10 10:37:57

标签: batch-file

我想创建一个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文件并且只输入一组数据时才会显示输入的数据。抱歉这个蹩脚的问题,我只是一个批处理文件初学者。

1 个答案:

答案 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的解释。