Dos命令(如果存在)无法正常工作

时间:2012-04-14 16:12:09

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

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

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

听到我的代码

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

请帮我解决这个问题。如果我可以从sql获得一个解决方案,那将是我自己的答案cz个人我不喜欢dos批次:)

提前谢谢。

3 个答案:

答案 0 :(得分:2)

我找到了一个解决方案,感谢我帮助我

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

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

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

答案 1 :(得分:0)

我不是DOS批量大师,但这里有一些建议:

  1. cd C:\installations\database这似乎非常错误。怎么样:

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

    :NODIR
    C:
    mkdir installations
    cd installations
    mkdir database
    

答案 2 :(得分:0)

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

如果目录已经存在,那只是更改了目录,然后它就落入了创建目录的代码中。

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

这是纠正的逻辑。

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