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

mat*_*teo 13 cmd batch-file

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

这个脚本的兴趣部分应该建立一个文件夹,如果该文件夹尚不存在,但是,如果此文件夹已经存在,它应该覆盖的内容.

我试过这样的事情:

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

但我不确定我是否正确行事.

谢谢

MC *_* ND 18

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
    )
)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

引用所有路径以避免空格问题.

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

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

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

编辑 - 正如dbenham评论,相同的代码可以写成一行

md "%USERPROFILE%\.qgis-custom" 2>nul && xcopy "%OSGEO4W_ROOT%\qgisconfig" "%USERPROFILE%\.qgis-custom" /s /v /e
Run Code Online (Sandbox Code Playgroud)

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

  • +1,这是一个更简单的一个班轮:`md"%USERPROFILE%\.qgis-custom"2> nul && xcopy"%OSGEO4W_ROOT%\ qgisconfig""%USERPROFILE%\ .qgis-custom"/ s/v/e` (5认同)

小智 8

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

一种称为“.”。和另一个 '..'

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

为了避免尾随反斜杠问题,只需测试目录是否知道它自己的名称。

例如:

if not exist %temp%\buffer\. mkdir %temp%\buffer
Run Code Online (Sandbox Code Playgroud)