Batch if exist always returns false

Batch if exist always returns false

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

我正在尝试创建一个脚本来自动映射网络驱动器。我包含了一个 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
)

%%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...
)