如果存在则批处理始终返回false

时间:2017-05-24 17:12:59

标签: batch-file if-statement exists

之前没有写过批处理脚本,所以我在学习过程中,但是......

我正在尝试创建一个自动映射网络驱动器的脚本。我添加了if exist语句来确定文件夹是否存在。但它一直退出if statement,好像文件夹不存在,即使它确实存在。当我单独运行命令时,它可以工作(例如if exist \\domain\folder\desired_folder (echo true) else (echo false)将回显true)。似乎它通过if statements并直接转到else statement

这是我遇到问题的代码,它应该进入第一个if statement并映射驱动器...任何帮助都将不胜感激。

REM define %A and %B
SET totalname="net user %USERNAME% /domain | FIND /i "Full Name""  

FOR /f "tokens=3-4 delims=, " %%A IN ('%totalname%') DO SET drivename=%%A_%%B


REM check if I drive folder exists
if exist "\\domain\folder\%%A_%%B" (
REM delete current I drive
REM map I drive
net use i: /delete
net use i: \\domain\folder\%drivename% /P:YES
) else if exist \\domain\folder\%USERNAME% (
    net use i: /delete
    net use i: \\domain\folder\%USERNAME% /P:YES
) else (
    echo ERROR: File Not Found
    echo ERROR: Unable to map I drive

    REM for debugging purposes: %username% & %drivename% echo the desired result
    echo username %USERNAME%
    echo a_b %drivename%
    pause
    exit
)

1 个答案:

答案 0 :(得分:1)

%%A%%B仅存在于for /F循环的上下文中,因此循环外的%%A%%B将扩展为字面上%A%B。您将循环中的%%A_%%B分配给变量drivename,因此请稍后使用%drivename%而不是%%A_%%B

此外,我建议使用引用的set语法,并在所有路径周围加上引号。

所以:

for /F "tokens=3-4 delims=, " %%A in ('
    net user %USERNAME% /domain ^| find /I "Full Name"
') do set "drivename=%%A_%%B"
rem // more code...
if exist "\\domain\folder\%drivename%" (
    rem // more code...
) else if exist "\\domain\folder\%USERNAME%" (
    rem // more code...
) else (
    rem // more code...
)