批处理文件。IF语句?

9

我有一个批处理文件,需要对一个文件应用 attrib +h 命令,然后将输出内容写入到一个文本文件,并在屏幕上显示。如果没有提供文件或找不到文件,也应该执行以上操作。以下是我的代码,但无法正常工作:


:TOP
IF EXIST "%1" GOTO COMMAND
) ELSE
(
GOTO ERROR1

:COMMAND
attrib +h %1
SHIFT
GOTO TOP
GOTO END

:ERROR1
IF "%1"=="" GOTO ERROR2
) ELSE
(
GOTO ERROR3

:ERROR2
ECHO.
ECHO No file(s) provided. Please re run the batch file.
GOTO END

:ERROR3
ECHO.
ECHO The file was not found. Please re run the batch file.
GOTO END

:END

这是我的第一门计算机课程,非常感谢您的帮助。谢谢。


2
为了让你开始: 命令解释器如何解析批处理脚本 优秀资源: ss64Rob van der WoudeDosTips - David Ruhmann
2
为了使您的代码更易读,请考虑重命名错误标签。例如,不要使用ERROR2,而是使用NOFILE。对于ERROR3,请使用NOTFOUND。 - Tony
3个回答

13

这段代码存在几个问题。首先,批处理文件需要在它们的IF / ELSE语句中使用特定的语法。

类似于这样:

IF EXIST "%1" (
    echo "it's here!"
) ELSE (
    echo "it isn't here!"
)

正常工作,而像这样的东西

IF EXIST "%1" 
(
    echo "it's here!"
) 

ELSE 
(
    echo "it isn't here!"
)

不需要。括号限定了块,因此如果IF命令评估为真,则会执行()之间的所有内容。
其次,您实际上不需要任何ELSE语句。因为在ELSE命令之前使用了GOTO命令,如果第一个IF评估为真,则永远不会到达第二个GOTO命令。
最后,根据您目前显示的代码,您不需要:TOP标签。
经过所有这些操作,您应该得到类似以下的代码:
@ECHO off
IF EXIST "%1" (
    GOTO COMMAND
)
GOTO ERROR1

:COMMAND
    echo "You entered a file correctly, and it exists!"
    GOTO END

:ERROR1
    IF "%1"=="" (
        GOTO ERROR2
    )
    GOTO ERROR3

:ERROR2
    ECHO.
    ECHO No file(s) provided. Please re run the batch file.
    GOTO END

:ERROR3
    ECHO.
    ECHO The file was not found. Please re run the batch file.
    GOTO END

:END

这样做使得理解更容易,我的教授格式不同,阅读起来更困难。 - SmkErrl
2
一个未来的小建议:不要告诉别人这是你的家庭作业,这样你可能会得到更多的帮助。 - Lily Mara

2

我对批处理不太熟悉,但看起来你的 If 语句格式不正确。

IF EXIST "%1" (
    GOTO COMMAND
) ELSE
(
    GOTO ERROR1
)

2

只是一些与括号和流程逻辑相关的问题。

@ECHO OFF

    IF "%~1"=="" GOTO ERROR1

:TOP
    IF NOT EXIST "%~1" GOTO ERROR2
    attrib +h "%~1"
    IF "%~2"=="" GOTO END
    SHIFT
    GOTO TOP

:ERROR1
    ECHO.
    ECHO No file(s) provided. Please re run the batch file.
    GOTO END

:ERROR2
    ECHO.
    ECHO The file "%~1" was not found. Please re run the batch file.
    GOTO END

:END

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接