我正在检查网络驱动器是否存在,如果我将文本文件复制到它,否则我回应它不存在
我的问题是它执行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
感谢任何帮助
答案 0 :(得分:3)
这不是有效的语法,括号和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
语句的 end 。
我不确定为什么你没有看到错误,除非你用2>nul:
调用你的脚本 - 这会丢掉错误而你只是看到:< / p>
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\"
)
请注意,我并不是说 更好,因为您可以访问比I更多的上下文。这是您应该根据完整图片做出的决定。