【问题标题】:Batch if exist always returns false如果存在批处理总是返回 false
【发布时间】:2017-10-25 04:14:33
【问题描述】:

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

我正在尝试创建一个脚本来自动映射网络驱动器。我包含了一个if exist 语句来确定该文件夹是否存在。但它一直退出if statement,就好像该文件夹不存在一样,即使它存在。当我单独运行该命令时,它可以工作(例如if exist \\domain\folder\desired_folder (echo true) else (echo false) 将回显真)。似乎它通过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 的来源。请提供minimal reproducible example!也许问题与缺少delayed expansion 有关。还要将路径放在"" 之间以避免在它们包含空格或其他特殊字符时出现问题...
  • 我正在使用以下命令来定义%A%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
  • @aschipfl 谢谢,我添加了我得到%A%B 的位置,并且在我试图获取的路径中没有空格或特殊字符,但我会添加“”来查看如果它有所作为

标签: batch-file if-statement exists


【解决方案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...
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-26
    • 2018-09-05
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多