批处理文件。 IF声明?

时间:2014-03-11 19:07:31

标签: windows batch-file if-statement cmd

我有一个批处理文件需要将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

这是我的第一个计算机课程,非常感谢任何帮助。谢谢。

3 个答案:

答案 0 :(得分:12)

此代码存在一些问题。首先,批处理文件需要具有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命令的计算结果为true,则(命令将执行)ELSE之间的所有内容。

其次,您实际上不需要任何GOTO语句。因为您在ELSE命令之前使用GOTO命令,所以如果第一个IF评估为真,则永远不会到达第二个: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 代码是不必要的。

毕竟,你应该留下这样的东西:

{{1}}

答案 1 :(得分: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

答案 2 :(得分:1)

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

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