【问题标题】:Batch Files. IF statements?批处理文件。 IF 语句?
【发布时间】:2014-03-11 19:07:31
【问题描述】:

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

这是我的第一门计算机课程,我们将不胜感激。谢谢。

【问题讨论】:

标签: windows batch-file if-statement cmd


【解决方案1】:

此代码存在一些问题。首先,批处理文件的 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 计算结果为 true,您将永远无法到达第二个 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

【讨论】:

  • 这样更容易理解,我教授的格式不同,因此更难阅读。
  • 对未来的提示:不要告诉别人这是你的作业。您可能会得到更多帮助。
【解决方案2】:

我对 Batch 不熟悉,但您的 If 语句格式似乎错误。

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

【讨论】:

    【解决方案3】:

    只是括号和流程逻辑的一些问题

    @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
    

    【讨论】:

      猜你喜欢
      • 2017-08-01
      • 2021-06-23
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 2023-03-20
      • 2022-01-11
      • 2021-01-21
      • 2012-07-30
      相关资源
      最近更新 更多