批处理文件:如果目录存在,请执行某些操作

时间:2015-04-28 21:53:09

标签: batch-file if-statement windows-7

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

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

但系统不打印测试词。

2 个答案:

答案 0 :(得分:3)

IF EXIST仅检查文件是否存在且无法检查文件夹。通常,你会像这样测试

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

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

但是我看到测试在批处理文件中失败,原因不明。所以我建议这样做:

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

CD myfolder尝试对该文件夹进行合法操作,MD / MKDIR的条件执行仅在该操作失败时才创建该文件夹。如果文件夹应该存在,CD ..将还原操作。如果文件夹不存在,2>NUL会禁止显示错误消息。

修改 显然有一种更简单的测试方法:在foldername中添加一个反斜杠(\),使其在语法上成为一个文件夹,如下所示:

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

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

修改 如果要执行多个命令,请在子shell中运行它们,也就是将它们包含在这样的parantheses中:

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

答案 1 :(得分:0)

如果EXIST可以检查文件夹 我这样用它:

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