“indien niet aanwezig” commando in batchbestand

Ik moet wat code in een Windows-batchbestand schrijven.

Het geïnteresseerde deel van dit script zou een map moeten maken als deze map nog niet bestaat, maar als deze map al bestaat, mag het NIETde inhoud overschrijven .

Ik heb zoiets als dit geprobeerd:

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

Maar ik weet niet zeker of ik het goed doe.

Bedankt


Antwoord 1, autoriteit 100%

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

Je hebt het bijna klaar. De logica is correct, slechts enkele kleine veranderingen.

Deze code controleert op het bestaan van de map (zie de afsluitende backslash, alleen om een map te onderscheiden van een bestand met dezelfde naam).

Als het niet bestaat, wordt het gemaakt en wordt de aanmaakstatus gecontroleerd. Als er een bestand met dezelfde naam bestaat of als je geen rechten hebt om de map aan te maken, zal het mislukken.

Als alles in orde is, worden bestanden gekopieerd.

Alle paden zijn geciteerd om problemen met spaties te voorkomen.

Het kan worden vereenvoudigd (alleen minder code betekent niet dat het beter is). Een andere optie is om altijd te proberen de map aan te maken. Als er geen fouten zijn, kopieer dan de bestanden

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

In beide codevoorbeelden worden bestanden niet gekopieerd als de map niet wordt gemaakt tijdens de uitvoering van het script.

BEWERKT – Als commentaar van dbenham kan dezelfde code als een enkele regel worden geschreven

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

De code na de &&wordt alleen uitgevoerd als het vorige commando geen foutniveau instelt. Als mkdirmislukt, wordt xcopyniet uitgevoerd.


Antwoord 2, autoriteit 13%

Onthoud bij het testen van mappen dat elke map twee speciale bestanden bevat.

Eén heet ‘.’ en de andere ‘..’

.is de eigen naam van de directory terwijl ..de naam is van de bovenliggende directory.

Om problemen met backslash achteraan te voorkomen, hoeft u alleen maar te testen of de directory zijn eigen naam kent.

bijvoorbeeld:

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

Other episodes