【问题标题】:Batch files: If directory exists, do something批处理文件:如果目录存在,做一些事情
【发布时间】:2015-04-28 21:53:08
【问题描述】:

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

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

但系统不打印测试词。

【问题讨论】:

  • 您是要打印到控制台还是打印到纸上? PRINT 命令可能不是您要查找的命令,请尝试 ECHO。
  • 这只是为了调试代码并确保系统正在执行它。我打算用 MKDIR、MOVE 和 RENAME 命令替换它。

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


【解决方案1】:

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  

【讨论】:

  • 那么,如果我需要执行几个命令...会怎样?
  • @Julian:我已经编辑了我的答案,向您展示如何执行一组命令。
  • if exist cannot check folders?试试 '如果存在 %windir% echo yes`
  • IF EXIST 会检查文件夹和文件。如果要检查特定文件夹(而不是同名文件)是否存在,请使用foldername` in the IF` 子句。如果检查文件,请检查不存在同名文件夹,然后检查文件名。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2014-12-02
    • 2018-12-09
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 2022-07-23
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多