简单的批处理文件作业

Posted

技术标签:

【中文标题】简单的批处理文件作业【英文标题】:Simple Batch File Homework 【发布时间】:2022-01-06 14:55:08 【问题描述】:

所以我有一个简单的作业,即做一个显示 3 个选项的批处理文件,以及该选项条目的错误消息。到目前为止,这对我来说似乎很简单。我看到了一个 youtube 视频,据我所知它应该可以运行,但问题是当我运行它并选择选项 2 时,它也会打开选项 1,而当我选择选项 3 时它不会退出程序。当我选择一个未指定的参数时,错误消息不会显示。我要复制粘贴我的批处理文件,因为它很容易理解。

@echo off

echo Choose an option:
echo.
echo 1)Open Disk cleanup

echo 2)Open Disk Defragmenter

echo 3)Exit
echo.

Set /p Op=Write the option:

if %op%==1 (
start %windir%\system32\cleanmgr.exe
) 
else if %op%==2 (
start %windir%\system32\dfrgui.exe
)
else if %op%==3 (
exit
) 
else (
    cls
    echo Error not defined
)   
pause  

有什么我遗漏或写错的地方,请告诉我。如果您可以复制粘贴并在您的计算机中运行它并告诉我它是否工作正常,因为有些东西告诉我在学习的过程中我尝试了几次,我想我搞砸了一些假设可以正确运行文件的东西,因为我的导师告诉我,在批处理文件中使用命令时我们必须小心。

【问题讨论】:

您的代码都不是正确的IF...ELSE 语法。 IF 命令的帮助文件中明确定义了语法。打开命令提示符并键入IF /? 以阅读帮助文件。尽管如此,拥有三个IF 命令而根本没有ELSE 似乎同样容易。 if %op%==1 start %windir%\system32\cleanmgr.exeif %op%==2 start %windir%\system32\dfrgui.exeif %op%==3 exit 是的,谢谢它几乎可以工作我唯一的问题是错误消息显示是否指示了另一个值。 我建议您改用CHOICE 命令。如果这样做,它将不允许用户输入无效的选项。 【参考方案1】:

我用这段代码做到了。

@echo off

echo Choose an option:

echo.

echo 1)Open Disk Cleanup Utility

echo 2)Open Disk Defragmenter

echo 3)Exit

echo.

Set /p op/3=Write the number option:

if %op/3%==1 (
start %windir%\system32\cleanmgr.exe
) 

if %op/3%==2 (
start %windir%\system32\dfrgui.exe
)

if %op/3%==3 (
exit
)

else (
    cls
    echo Error not defined
)   
pause  

我遇到的唯一问题是,即使选择了选项 1 和 2,也会出现错误消息,它会执行选项,但也会显示错误消息。我只希望错误消息显示是否未选择任何这些参数。 我知道 else 正在响应,因为如果我选择选项 1 else 它会执行,因为不是数字 2 或 3。我想到的是是否可以像一组选项一样以枚举格式定义 op 变量。

【讨论】:

我在之前的 cmets 中明确指出,正确的 IF...ELSE 语法在 IF 命令的帮助中已明确定义。我什至告诉过你如何阅读帮助。您没有使用正确的 IF... ELSE 语法。我为您修复了您的代码,并为您提供了替代解决方案。我提供的两种代码解决方案有什么问题? 问题是我第一次尝试你的代码它没有工作。现在我再次尝试它工作,所以当我复制粘贴你的代码时可能我做错了。但是我已经通过一些更改发现它有点不同。感谢您的帮助。【参考方案2】:

您的代码格式正确,但由于使用了SET /P 命令,容易受到命令注入的影响。

@echo off

echo Choose an option:
echo.
echo 1)Open Disk cleanup

echo 2)Open Disk Defragmenter

echo 3)Exit
echo.

Set /p Op=Write the option:

if "%op%"=="1" (
    start "" "%windir%\system32\cleanmgr.exe"
) else if "%op%"=="2" (
    start "" "%windir%\system32\dfrgui.exe"
) else if "%op%"=="3" (
    exit /b
) else (
    cls
    echo Error not defined
    pause
)

处理无效输入选项的最佳实践解决方案。

@echo off
echo Choose an option:
echo.
echo 1)Open Disk cleanup

echo 2)Open Disk Defragmenter

echo 3)Exit
echo.

choice /C 123 /N /M "Select an Option:"
set "op=%errorlevel%"

if "%op%"=="1" start "" "%windir%\system32\cleanmgr.exe"
if "%op%"=="2" start "" "%windir%\system32\dfrgui.exe"
if "%op%"=="3" exit /b

【讨论】:

以上是关于简单的批处理文件作业的主要内容,如果未能解决你的问题,请参考以下文章

python--------文件处理之增删改查--------作业用函数

写入 VBS 文件的批处理作业

Pentaho 作业未通过运行批处理文件执行

Spring 批处理作业应仅在 Spring 集成文件轮询器轮询文件后执行一次

在 PowerShell 中创建批处理作业

带有文件名的Spring批处理作业参数