batch-file - 批处理文件 : If directory exists, 做某事

标签 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

但系统不打印测试词。

最佳答案

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”尚不存在,这将创建该文件夹。此外,如果有 文件 名为“我的文件夹”的 MD将失败并在显示错误消息后终止批处理文件。此外,将设置 ERRORLEVEL。我更喜欢这个,因为不必重定向错误输出。

编辑:
如果要执行多个命令,请在子 shell 中运行它们,即,将它们括在括号中,如下所示:
if not exist myfolder\ (  
    md myfolder
    dir myfolder
    REM ...or run any other commands
) || goto :EOF  

关于batch-file - 批处理文件 : If directory exists, 做某事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930624/

相关文章:

if-statement - 为什么一个变量与多个值的不相等检查总是返回 true?

正则表达式不匹配。在线生成器确实

ruby - Ruby 中 Windows 上的 Unicode 文件名

windows - 如何将本地文件替换为 SVN 存储库中的版本?

batch-file - dir/b 命令输出一行,加上DELIMITER 批处理文件编程

batch-file - 批量发声?

java - Spring Cloud数据流是否支持批处理

windows - 如何从 `for` 处理的项目(在 `in` 之后)调用子程序?

if-statement - if 语句和 Pascal 中的最大值

c++ - 从哪里可以获得 Windows 7 的子身份验证包示例?