"如果不存在"批处理文件中的命令

时间:2014-05-19 10:22:17

标签: batch-file cmd

我需要在Windows批处理文件中编写一些代码。

此脚本的感兴趣部分应创建一个文件夹如果此文件夹尚不存在,但是,如果此文件夹已存在,则应覆盖内容。

我试过这样的事情:

if not exist %USERPROFILE%\.qgis-custom (
    mkdir %USERPROFILE%\.qgis-custom 
    xcopy %OSGEO4W_ROOT%\qgisconfig %USERPROFILE%\.qgis-custom /s /v /e
)

但我不确定我是否做得对。

谢谢

2 个答案:

答案 0 :(得分:15)

if not exist "%USERPROFILE%\.qgis-custom\" (
    mkdir "%USERPROFILE%\.qgis-custom" 2>nul
    if not errorlevel 1 (
        xcopy "%OSGEO4W_ROOT%\qgisconfig" "%USERPROFILE%\.qgis-custom" /s /v /e
    )
)

你差不多完成了。逻辑是正确的,只是一些小的变化。

此代码检查文件夹是否存在(请参阅结尾反斜杠,只是为了区分文件夹与具有相同名称的文件)。

如果它不存在,则创建它并检查创建状态。如果存在具有相同名称的文件或您无权创建该文件夹,则该文件将失败。

如果一切正常,则会复制文件。

引用所有路径以避免出现空格问题。

它可以简化(只需更少的代码,并不意味着它更好)。另一种选择是始终尝试创建文件夹。如果没有错误,则复制文件

mkdir "%USERPROFILE%\.qgis-custom" 2>nul 
if not errorlevel 1 (
    xcopy "%OSGEO4W_ROOT%\qgisconfig" "%USERPROFILE%\.qgis-custom" /s /v /e
)

在两个代码示例中,如果在脚本执行期间未创建文件夹,则不会复制文件。

EDITED - 正如dbenham评论的那样,相同的代码可以写成一行

md "%USERPROFILE%\.qgis-custom" 2>nul && xcopy "%OSGEO4W_ROOT%\qgisconfig" "%USERPROFILE%\.qgis-custom" /s /v /e

&&之后的代码只有在前一个命令没有设置errorlevel时才会被执行。如果mkdir失败,则不会执行xcopy

答案 1 :(得分:3)

测试目录时,请记住每个目录包含两个特殊文件。

一个被称为'。'和另一个'..'

是目录自己的名称,而 .. 是其父目录的名称。

为了避免跟踪反斜杠问题,只需测试一下该目录是否知道它自己的名字。

例如:

if not exist %temp%\buffer\. mkdir %temp%\buffer