"si no existe" comando en el archivo por lotes

Necesito escribir un código en un archivo por lotes de Windows.

La parte interesada de este script debe crear una carpeta si esta carpeta no existe todavía, pero, si esta carpeta ya existe, debe NO sobrescribir el contenido.

He intentado algo como esto

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

Pero no estoy seguro de si lo estoy haciendo bien.

Gracias.

Solución
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
    )
)

Lo tienes casi hecho. La lógica es correcta, sólo algunos pequeños cambios.

Este código comprueba la existencia de la carpeta (ver la barra invertida final, sólo para diferenciar una carpeta de un archivo con el mismo nombre).

Si no existe, se crea y se comprueba el estado de la creación. Si existe un archivo con el mismo nombre o no tiene derechos para crear la carpeta, fallará.

Si todo es correcto, se copian los archivos.

Todas las rutas se entrecomillan para evitar problemas con los espacios.

Se puede simplificar (menos código, no significa que sea mejor). Otra opción es intentar siempre crear la carpeta. Si no hay errores, entonces copia los archivos

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

En ambos ejemplos de código, los archivos no se copian si la carpeta no se crea durante la ejecución del script.

EDITADO - Como comenta dbenham, el mismo código puede escribirse como una sola línea

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

El código después de && sólo se ejecutará si el comando anterior no establece errorlevel. Si mkdir falla, xcopy no se ejecuta.

Comentarios (5)

Cuando compruebe los directorios, recuerde que cada directorio contiene dos archivos especiales.

Uno se llama '.' y el otro '..'

. es el nombre propio del directorio, mientras que .. es el nombre de su directorio padre.

Para evitar problemas de barras invertidas al final de la cadena, compruebe si el directorio conoce su propio nombre.

Ej:

if not exist %temp%\buffer\. mkdir %temp%\buffer
Comentarios (0)