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.
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.
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