【问题标题】:Dos Command if exist does not work properlyDos 命令(如果存在)无法正常工作
【发布时间】:2012-04-14 16:12:08
【问题描述】:

我知道现在问 ms dos 相关问题不是上帝。但我有一个小问题 我正在为应用程序创建一个安装程序项目,该应用程序需要执行具有指定路径的创建数据库脚本。当路径不存在时,sql引擎返回错误消息因此我需要检查路径是否存在,如果不存在我需要创建路径 要做到这一点,我使用下面的脚本进行测试,但它不像我预期的那样工作。当我第二次执行相同的 bat 文件时,它给了我以下错误

“子目录或文件\installations\database已经存在”

听到是我的代码

c:
IF NOT EXIST c:\installations\database GOTO NODIR
cd C:\installations\database
:NODIR 
mkdir \installations\database\

请帮我解决这个问题。如果我能从 sql it self 得到一个解决方案,那将是我个人的答案 cz 我不喜欢 dos 批次:)

提前致谢。

【问题讨论】:

    标签: sql sql-server if-statement command exists


    【解决方案1】:

    我找到了解决方案,谢谢你帮助我

    我们可以通过执行下面的脚本来检查文件夹是否存在

    master.dbo.xp_fileexist @file
    

    Reference

    我们可以使用下面的命令创建一个文件夹

    SET @Path = 'E:\temp\'
    SET @MD =   ' mkdir ' + @Path +'WK' + @wk_no
    EXEC    xp_cmdshell @MD, no_output
    

    extracted form

    非常感谢您对这个问题的支持。我认为这是满足我要求的理想解决方案。请随时添加您的想法。

    【讨论】:

      【解决方案2】:

      我不是 DOS 批处理专家,但这里有一些建议:

      1. cd C:\installations\database 这似乎真的错了。怎么样:

        C:
        cd installations\database
        
      2. 同样,你为什么不先验证你是否在正确的目录中:

        :NODIR
        C:
        mkdir installations
        cd installations
        mkdir database
        

      【讨论】:

      • 我确实尝试过,但它不起作用的是,如果指定位置中不存在该文件夹,脚本将创建一个,但如果该文件夹存在,它会给我一条错误消息
      【解决方案3】:

      您的原始代码有错误的逻辑。

      只有在目录已经存在的情况下才改变目录,然后才落入创建目录的代码中。

      在检查目录是否存在时,最好在末尾附加\,以确保 IF EXIST 仅匹配目录而不匹配文件名。

      这里是更正的逻辑。

      c:
      if not exist "c:\installations\database\" mkdir "c:\installations\database"
      cd "c:\installations\database"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多