我有一个批处理文件需要将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
这是我的第一个计算机课程,非常感谢任何帮助。谢谢。
答案 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
)