批处理文件:如果目录存在,做一些事情

Batch files: If directory exists, do something

我正在尝试执行以下操作:

IF EXISTS ("C:\Users\user\Desktop\folder1\") {

MOVE "C:\Users\user\Desktop\folder2\" "C:\Users\user\Desktop\folder1\"
RENAME "C:\Users\user\Desktop\folder1\folder2\" "folder3"

} else {

MKDIR "C:\Users\user\Desktop\folder1\"
MOVE "C:\Users\user\Desktop\folder2\" "C:\Users\user\Desktop\folder1\"
RENAME "C:\Users\user\Desktop\folder1\folder2\" "folder3"
}

使用以下代码:

  @ECHO ON

IF EXIST "C:\Users\user\Desktop\folder1\" (GOTO MOVER)

PRINT "It doesn't exists - This is just for debugging"
PAUSE

:MOVER
ECHO "MOVER"
PAUSE
EXIT
:END

但是系统不打印测试词

IF EXIST 只检查文件是否存在,不能检查文件夹。通常,你这样测试

IF NOT EXIST "myfolder\NUL" mkdir "myfolder"

伪设备NUL就像一个文件,实际上存在于每个文件夹中。注意拼写。

但是我看到批处理文件中的测试失败了,原因不明。所以我建议改为:

CD myfolder 2>NUL && CD .. || MD myfolder

CD myfolder 尝试对文件夹进行合法操作,只有当操作失败时 MD/MKDIR 的条件执行才会创建文件夹。 CD .. 如果文件夹应该存在则恢复操作。如果文件夹不存在,2>NUL 会抑制错误消息。

编辑: 显然有一种更简单的测试方法:将反斜杠 (\) 附加到文件夹名称,使其在语法上成为一个文件夹,如下所示:

if not exist myfolder\ md myfolder || goto :EOF

这将创建文件夹 "myfolder"(如果尚不存在)。此外,如果存在名为 "myfolder" 的 文件,则 MD 将失败并且批处理文件将在显示错误消息后终止。此外,将设置 ERRORLEVEL。我更喜欢这个,因为不必重定向错误输出。

编辑: 如果你想执行多个命令,运行 将它们放在一个子 shell 中,也就是说,将它们括在括号中,如下所示:

if not exist myfolder\ (  
    md myfolder
    dir myfolder
    REM ...or run any other commands
) || goto :EOF  

IF EXIST 可以检查文件夹 我是这样使用的:

IF EXIST %local_path%\opensource\eclipse rmdir %local_path%\opensource\eclipse /s /q >nul