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

Posted

技术标签:

【中文标题】Dos 命令(如果存在)无法正常工作【英文标题】:Dos Command if exist does not work properly 【发布时间】: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 批次:)

提前致谢。

【问题讨论】:

【参考方案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 批处理专家,但这里有一些建议:

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

    C:
    cd installations\database
    

    同样,你为什么不先验证你是否在正确的目录中:

    :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"

【讨论】:

以上是关于Dos 命令(如果存在)无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Electron —— 执行DOS命令有乱码

在dos下无法使用unzip命令,提示‘unzip’不是内部命令或外部命令,是怎么回事?如何才能使用unzip?

DOS命令详解

什么是DOS攻击,DOS攻击的命令都有哪些,攻击的方式都有哪些?

如果我从新的命令提示符重新运行,批处理文件无法正常工作

验证数组命令