コマンドプロンプトのmkdirで「既に存在する場合は何もしない」

  • 21
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

自分用メモ

mkdir hoge\huga > NUL 2>&1

「実行結果はNUL宛に流すぜ、標準エラー出力も標準出力にまとめてな!」ってとこでしょうか。
これで、動作だけはLinuxの mkdir -p hoge/huga と似た感じになります。

注意

エラーが発生した場合(既にディレクトリが存在している場合)は、
mkdirコマンド自体は終了コード1で終了しており、エラー扱いになります。

mkdir hoge > NUL 2>&1
mkdir hoge > NUL 2>&1
echo %ERRORLEVEL%
1

AntやGradle、Jenkins等による一連の処理のなかに組み込む場合など、
終了コードが0(正常)以外だと困る場合があります。
対処として、ErrorLevelによって処理を分岐したり、単純に無視したりしておきます。

mkdir hoge\huga > NUL 2>&1
if ERRORLEVEL 1 goto MKDIR_FAILED else goto END
:MKDIR_FAILED
echo 既にディレクトリが存在しています。
:END

特になにもしないで無視する場合はこんな感じ

mkdir hoge\huga > NUL 2>&1
if ERRORLEVEL 1 cmd /c exit 0

ERRORLEVELはsetコマンドで直接変更すると固定化されてしまうため
別プロセスでコマンドプロンプトを起動し、終了コード0で終了させます。