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...
)
之前从未写过批处理脚本,所以我正在学习过程中但是...
我正在尝试创建一个脚本来自动映射网络驱动器。我包含了一个 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...
)