" jika tidak ada &" perintah dalam file batch

Saya perlu menulis beberapa kode dalam file batch windows.

Bagian yang tertarik dari skrip ini harus membuat folder jika folder ini belum ada, tetapi, jika folder ini sudah ada, maka harus TIDAK menimpa konten.

Saya mencoba sesuatu seperti ini:

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

Tapi saya tidak yakin apakah saya melakukannya dengan benar.

Terima kasih

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

Anda sudah hampir selesai. Logikanya sudah benar, hanya beberapa perubahan kecil.

Kode ini memeriksa keberadaan folder (lihat akhiran backslash, hanya untuk membedakan folder dari berkas dengan nama yang sama).

Jika folder tersebut tidak ada, maka folder tersebut akan dibuat dan status pembuatannya diperiksa. Jika file dengan nama yang sama ada atau Anda tidak memiliki hak untuk membuat folder, maka akan gagal.

Jika semuanya baik-baik saja, file-file akan disalin.

Semua jalur dikutip untuk menghindari masalah dengan spasi.

Ini bisa disederhanakan (hanya sedikit kode, bukan berarti lebih baik). Pilihan lain adalah selalu mencoba untuk membuat folder. Jika tidak ada kesalahan, maka salin berkas-berkas

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

Dalam kedua contoh kode, file tidak disalin jika folder tidak dibuat selama eksekusi skrip.

DIEDITASI - Seperti komentar dbenham, kode yang sama dapat ditulis sebagai satu baris

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

Kode setelah && hanya akan dieksekusi jika perintah sebelumnya tidak mengatur errorlevel. Jika mkdir gagal, xcopy tidak dieksekusi.

Komentar (5)

Ketika menguji direktori, ingatlah bahwa setiap direktori berisi dua file khusus.

Satu disebut '.' dan yang lainnya '..'

. adalah nama direktori itu sendiri sementara .. adalah nama direktori induknya.

Untuk menghindari masalah backslash yang tertinggal, cukup tes untuk melihat apakah direktori mengetahui namanya sendiri.

Misalnya:

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