之前没有写过批处理脚本,所以我在学习过程中,但是......
我正在尝试创建一个自动映射网络驱动器的脚本。我添加了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
)
答案 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...
)