Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件如果else总是执行else,那么使用do时的正确语法是什么_Batch File - Fatal编程技术网

Batch file 批处理文件如果else总是执行else,那么使用do时的正确语法是什么

Batch file 批处理文件如果else总是执行else,那么使用do时的正确语法是什么,batch-file,Batch File,我正在检查网络驱动器是否存在,如果它存在,我会通过文本文件复制到它,否则我会回显它不存在 我的问题是它每次都执行if,但也总是执行else 我仔细检查了匹配的括号并搜索了语法,我想知道它是否与do 请参阅下面的代码 @echo off set LOGFILE=inv.filie.log call :LOG >> %LOGFILE% exit /B :LOG E: echo. echo *** Date: %DATE:/=-% Time:%TIME::=-% *** echo.

我正在检查网络驱动器是否存在,如果它存在,我会通过文本文件复制到它,否则我会回显它不存在

我的问题是它每次都执行if,但也总是执行else 我仔细检查了匹配的括号并搜索了语法,我想知道它是否与
do

请参阅下面的代码

@echo off
set LOGFILE=inv.filie.log
call :LOG >> %LOGFILE%
exit /B

:LOG
E:

echo.
echo *** Date: %DATE:/=-%  Time:%TIME::=-% *** 
echo.


CD "E:\Ftp\Clients\OUT_TEST\INV\"

echo.
echo.
echo Moving Files to Test:

For %%G in (*.txt) do ( 
    if exist z:\ (
        COPY /Y "%%G" "Z:\Outgoing\" 
        MOVE /Y "%%G" "E:\Ftp\Clients\OUT_TEST\INV\Archive\"
    )
    else (
        echo Direcotry Z:\ for test is offline
    )
)

echo.
echo.
echo *** Task complete ***
inv.file.log的输出为

*** Date: 2018-05-25  Time: 8-11-53.89 *** 

Moving Files to Test AS2:
        1 file(s) copied.
        1 file(s) moved.
Direcotry Z:\ for test is offline


*** Task complete ***
从上面可以看出,它总是回显行
Direcotry Z:\for test is offline


如果有任何帮助,我们将不胜感激。

这是无效的语法,括号和
else
必须在同一行

以下脚本:

@echo off
if exist c:\ (
    echo if true
)
else (
    echo if false
)
将产生:

if true
'else' is not recognized as an internal or external command,
operable program or batch file.
if false
因为它将第一个右括号视为
if
语句的结尾

我不确定您为什么没有看到错误,除非您使用
2>nul:
调用脚本-这将丢弃错误,您只需看到:

if true
if false

在任何情况下,正确的方法是正确格式化
if
语句。在您的情况下,这将是:

for %%g in (*.txt) do ( 
    if exist z:\ (
        copy /y "%%g" "z:\outgoing\" 
        move /y "%%g" "e:\ftp\clients\out_test\inv\archive\"
    ) else (
        echo Directory z:\ for test is offline.
    )
)
您也可以通过不检查每个文件是否存在
z:
来改进它。您可能会发现这样做效果更好:

if not exist z:\ (
    echo Directory z:\ for test is offline.
) else (
    copy /y *.txt "z:\outgoing\" 
    move /y *.txt "e:\ftp\clients\out_test\inv\archive\"
)

请注意,我并不是说它更好,因为您可以访问比我更多的上下文。这是您应该根据完整的图片做出的决定。

这是无效的语法,括号和
否则
必须在同一行

以下脚本:

@echo off
if exist c:\ (
    echo if true
)
else (
    echo if false
)
将产生:

if true
'else' is not recognized as an internal or external command,
operable program or batch file.
if false
因为它将第一个右括号视为
if
语句的结尾

我不确定您为什么没有看到错误,除非您使用
2>nul:
调用脚本-这将丢弃错误,您只需看到:

if true
if false

在任何情况下,正确的方法是正确格式化
if
语句。在您的情况下,这将是:

for %%g in (*.txt) do ( 
    if exist z:\ (
        copy /y "%%g" "z:\outgoing\" 
        move /y "%%g" "e:\ftp\clients\out_test\inv\archive\"
    ) else (
        echo Directory z:\ for test is offline.
    )
)
您也可以通过不检查每个文件是否存在
z:
来改进它。您可能会发现这样做效果更好:

if not exist z:\ (
    echo Directory z:\ for test is offline.
) else (
    copy /y *.txt "z:\outgoing\" 
    move /y *.txt "e:\ftp\clients\out_test\inv\archive\"
)

请注意,我并不是说它比我更好,因为你比我能接触到更多的上下文。这是一个你应该根据完整的情况做出的决定。

@GOTO0:你想得对<代码>)其他(要求在一条物理线上。可能重复的目标(太宽)(在注释中回答)@GOTO0:你想得对。
)其他(
要求在一条物理线上。可能重复的目标(太宽)(在注释中回答)