选择Y / N的批处理文件

时间:2015-09-07 20:44:58

标签: batch-file

请帮助,我是初学者,我需要创建批处理文件来删除日志文件。但在删除之前,我需要让用户删除最后一个日志文件或所有日志文件。

我尝试实现它:

set /P PARAM_VALUE=Remove only the last log file?(Y/N)?  

if /I "%PARAM_VALUE%"=="y" goto DeleteLast
if /I "%PARAM_VALUE%"=="n" goto DeleteAll

但在这种情况下,我可以输入任何值,我需要避免除Y,y,N,n之外的其他字符。
THX。

3 个答案:

答案 0 :(得分:0)

在这种情况下,解决方案之一是使用CHOICE命令。
此工具允许用户从选项列表中选择一个项目并返回所选选项的索引。

语法:CHOICE [ /C choices ] [ /N ] [ /CS ] [ /T timeout /D choice ] [ /M text ]

参数列表:

  • / C选项指定要创建的选项列表。英文版的默认列表为YN
  • / N 隐藏提示中的选项列表。显示提示之前的消息,并且仍然启用选项。
  • / CS 启用区分大小写的选项。默认情况下,该实用程序不区分大小写。 注意:DOS和NT Resource Kit版本使用/S代替
  • / T timeout 在默认选择之前暂停的秒数 是。可接受的值为0到9999。 如果指定0,则不会有暂停,并且会选择默认选项。 注意:DOS和NT Resource Kit版本使用/T:default,timeout代替。
  • / D default 指定超时秒后的默认选项。 字符必须位于/C选项指定的选项集中,并且还必须使用/T指定超时 注意:DOS和NT Resource Kit版本使用/T:default,timeout代替。
  • / M text 指定在提示之前显示的消息。 如果未指定,则实用程序仅显示提示。

对于您的问题,请尝试使用以下内容:

choice /C:YN /M:"Remove only the last log file? [YN]"
IF ERRORLEVEL ==1 GOTO DeleteLast
IF ERRORLEVEL ==2 GOTO DeleteAll
GOTO next

:DeleteAll
rem delete all

:DeleteLast
rem delete last

:next
rem continue work with Batch file

答案 1 :(得分:0)

删除命令已提供提示N / y

修改

del /p

在控制台中输入del /?以获取更多信息

<强>更新

您可以使用此示例进行测试:

@echo off

SETLOCAL

Echo:
Echo  /!\ Creating a bunch of empty files /!\
echo  Press any key to continue or CTRL-C to exit...
Pause>nul

for /L %%A in (1,1,4) do (copy /y NUL _temp_file_%%A.ext)

Echo:
Echo  /!\ Deleting a bunch of empty files with command prompt /!\
echo  Press any key to continue or CTRL-C to exit...
Pause>nul

del /p "_temp_file_?.ext"

Echo:
Pause>nul|(echo  Press any key to exit...)

答案 2 :(得分:0)

您可以捕获所有其他输入:

:CONFIRM
if /i "%PARAMVALUE%"=="y" goto DeleteLast
if /i "%PARAMVALUE%"=="n" goto DeleteAll
echo Please enter only Y/y or N/n!
ping localhost -n 2 >nul
goto CONFIRM

我也将它用于我自己的脚本,它的工作非常简单,非常简单!