批处理文件.IF声明?

Smk*_*rrl 9 windows cmd if-statement batch-file

我有一个批处理文件,需要将attrib + h命令应用于文件,然后输出到txt文件并在屏幕上显示内容.如果尚未提供或无法找到文件,也应该这样做.到目前为止,我有这个,但无法让它工作:


: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
Run Code Online (Sandbox Code Playgroud)

这是我的第一个计算机课程,任何帮助将不胜感激.谢谢.

Nat*_*ara 12

此代码存在一些问题.首先,批处理文件需要特定的语法及其IF/ ELSEstatements.

像这样的东西

IF EXIST "%1" (
    echo "it's here!"
) ELSE (
    echo "it isn't here!"
)
Run Code Online (Sandbox Code Playgroud)

工作正常,而这样的事情

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

ELSE 
(
    echo "it isn't here!"
)
Run Code Online (Sandbox Code Playgroud)

才不是.括号分隔块,因此您的IF命令将执行其间的所有内容(,)如果它的计算结果为true.

其次,你实际上并不需要任何ELSE陈述.因为您在GOTO命令之前使用命令ELSE,所以GOTO如果第一个命令的IF计算结果为true ,则永远不会到达第二个命令.

最后,使用您当前显示的: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
Run Code Online (Sandbox Code Playgroud)

  • 未来的小窍门:不要告诉别人这是你的功课.你可能会得到更多的帮助. (2认同)

小智 2

我不太熟悉 Batch,但看起来您的 If 语句格式错误。

IF EXIST "%1" (
    GOTO COMMAND
) ELSE
(
    GOTO ERROR1
)
Run Code Online (Sandbox Code Playgroud)