バッチファイル内の "存在しない場合 "コマンド

Windowsのバッチファイルにあるコードを書きたいのですが。

このスクリプトの興味のある部分は、このフォルダがまだ存在しない場合フォルダを作成し、このフォルダがすでに存在する場合は、内容を上書きするべきではありません**。

私はこのようなことを試してみました。

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

でも、ちゃんとできているのか不安です。

ありがとうございました。

質問へのコメント (2)
ソリューション
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
    )
)

ほぼ完成していますね。ロジックは正しいので、少し変更するだけです。

このコードでは、フォルダの存在をチェックしています(最後のバックスラッシュは、フォルダと同名のファイルを区別するためのものです)。

もし存在しなければ、それが作成され、作成ステータスがチェックされます。同じ名前のファイルが存在するか、フォルダを作成する権限がない場合は、失敗します。

全てに問題がなければ、ファイルがコピーされます。

スペースによる問題を避けるため、すべてのパスは引用符で囲まれています。

これは単純化することができます(単にコードが少ないだけで、それが良いという意味ではありません)。もう一つの方法は、常にフォルダーを作成しようとすることです。エラーがなければ、ファイルをコピーします。

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

どちらのコードサンプルでも、スクリプトの実行中にフォルダーが作成されないと、ファイルはコピーされません。

EDITED - dbenhamのコメントにあるように、同じコードは一行で書くことができます。

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

の後のコードは、前のコマンドがerrorlevelを設定しない場合のみ実行されます。mkdirが失敗した場合、xcopy` は実行されません。

解説 (5)

ディレクトリをテストする場合、すべてのディレクトリは2つの特別なファイルを含んでいることを忘れないでください。

一つは '.'、もう一つは '...&#39.と呼ばれるものです。

.はディレクトリ自身の名前、..は親ディレクトリの名前です。

バックスラッシュの問題を避けるために、ディレクトリが自分の名前を知っているかどうかをテストしてください。

例えば

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