【问题标题】:batch mkdir return codes批处理 mkdir 返回码
【发布时间】:2014-05-28 16:05:49
【问题描述】:

我的批处理脚本检查文件夹是否已经存在,如果不存在则创建目录。除了文件夹是否已经存在之外,我还遇到了其他问题,但我无法确定它是什么。有没有办法返回错误代码来确定我的问题?

代码:

if not exist "%arcval_folder%" (
    mkdir "%arcval_folder%"
    echo Directory: "%arcval_folder%" created. 1>>"%logfile%" 2>&1
    ECHO. 1>>"%logfile%" 2>&1
)

我一直知道该文件夹已创建,即使它没有检查目标位置。

【问题讨论】:

    标签: batch-file mkdir


    【解决方案1】:

    您可以尝试使用 %ERRORLEVEL% 伪变量检查 mkdir 命令的返回:

    C:\Users\DWilches>

    C:\Users\DWilches>mkdir test
    
    C:\Users\DWilches>echo %ERRORLEVEL%
    0
    
    C:\Users\DWilches>mkdir test
    A subdirectory or file test already exists.
    
    C:\Users\DWilches>echo %ERRORLEVEL%
    1
    

    【讨论】:

    • 这不会告诉你目录是否没有创建。
    • @SachaDee 我同意你的看法。但是如何检查正确呢?
    【解决方案2】:

    这不会测试文件夹是否存在。它测试是否存在具有所需名称的文件或文件夹

    if exist "c:\somefolder"
    

    这将测试文件夹是否存在

    if exist "c:\somefolder\"
    

    但你必须考虑更多的事情

    set "test=c:\somewhere"
    
        if exist "%test%\" (
            echo Folder exists
        ) else if not exist "%test%" (
            echo No file nor folder exist with the indicated name. 
            echo Maybe, folder can be created
        ) else (
            echo There is a file with the same name as the required folder.
            echo Folder can not be created
        )
    

    当然,如果您决定创建文件夹,请测试错误级别。也许您没有创建文件夹的权限。

    【讨论】:

      【解决方案3】:

      如果命令成功,您可以使用 && 设置成功变量。

      您可以设置一个标志并执行“mkdir”并在一行中仔细检查是否成功,如下所示:

      set folder=test
      set OK=false & mkdir %folder% && if exist %folder% set OK=true
      

      之后,像这样检查 OK:

      if (%OK%)=(true)(
           echo made dir %folder%
           goto:doSomethingUseful
      )else(
           echo failed to make dir %folder%
           goto:whatIdoWhenThisFailed    
      )
      

      注意事项:

      • 在 DOS 中,'&&' 后面的命令只有在前面的命令才会运行 没有除 0(零)以外的错误级别。

      • 据我所知,不需要第二次检查“if exists %folder”,因为“mkdir”如果成功,只会返回错误级别 0(零)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-17
        • 2018-06-02
        • 1970-01-01
        • 2022-01-23
        相关资源
        最近更新 更多