web-dev-qa-db-ja.com

バッチを使用してフォルダを作成します。ただし、フォルダが存在しない場合のみ

Windowsのバッチスクリプトで次のことを行う方法を誰かに教えてもらえますか。 (*.bat):

  • フォルダが存在しない場合にのみフォルダを作成します。

より詳しくは、C:\ドライブにVTSという名前のフォルダーを作成したいのですが、それはそのフォルダーがまだ存在しない場合に限られます。フォルダーが既に存在していてバッチが実行されている場合は、フォルダーの内容を上書きしたくありません。

379
Bill

あなたはこれを使うだけです:if not exist "C:\VTS\" mkdir C:\VTS itはフォルダが存在しない場合にのみディレクトリを作成します。

この存在テストは、VTSが存在し、それがディレクトリである場合にのみtrueを返すことに注意してください。存在しない場合、またはファイルとして存在する場合は、mkdirコマンドが実行され、エラーが発生します。 VTSもファイルとして存在するかどうかを確認したいと思うかもしれません。

535
The Answerer
if exist C:\VTS\NUL echo "Folder already exists"

if not exist C:\VTS\NUL echo "Folder does not exist"

https://support.Microsoft.com/ja-jp/kb/65994 も参照してください。

(2018年3月7日に更新。Microsoftの記事は停止中。 https://web.archive.org/web/20150609092521/https://support.Microsoft.com/ja-jp/kb/65994 にアーカイブ)

193

何があってもmkdir C:\VTSを呼ぶだけです。サブディレクトリが既に存在することを単に報告するだけです。

編集: 他の人が指摘したように、これはフォルダが既に存在する場合に%ERRORLEVEL%を設定します。あなたのバッチ(またはそれを呼び出しているプロセス)がエラーレベルを気にしないのであれば、このメソッドはうまく機能します。質問はエラーレベルを回避することについて言及していないので、この答えは完全に有効です。フォルダが存在しない場合でもフォルダを作成するというニーズを満たし、既存のフォルダの内容を上書きすることもありません。それ以外の場合は、 Martin Schapendonkの回答に従ってください

50
Agent_9191
mkdir C:\VTS 2> NUL

VTSという名前のフォルダーを作成し、NULA subdirectory or file TEST already existsを出力します。

または

(C:&(mkdir "C:\VTS" 2> NUL))&

ドライブ文字をC:mkdirに変更し、エラーをNULに出力して次のコマンドを実行します。

34
3years2late
set myDIR=LOG
IF not exist %myDIR% (mkdir %myDIR%)
29
Robie

私はこの方法を使用し、ディレクトリ名の末尾にバックスラッシュを置く必要があります指定したディレクトリ、使用しない "C:\ VTS"名前のファイルが存在する可能性があるためVTS "" C: "パーティションに保存されました。正しい方法は "C:\ VTS \"VTSの後のバックスラッシュを確認してください。正しい方法。

@echo off
@break off
@title Create folder with batch but only if it doesn't already exist - D3F4ULT
@color 0a
@cls

setlocal EnableDelayedExpansion

if not exist "C:\VTS\" (
  mkdir "C:\VTS\"
  if "!errorlevel!" EQU "0" (
    echo Folder created successfully
  ) else (
    echo Error while creating folder
  )
) else (
  echo Folder already exists
)

pause
exit
16
D3F4ULT

あなたが使用することができます:

if not exist "C:\VTS\" mkdir "C:\VTS"

コードを拡張して、欠落していると思われるファイルを置き換えることもできます。

if not exist "C:\VTS\important.file" echo. > "C:\VTS\important.file"
15
user5628226

私はこれをアイビームの仕事に使う私のスクリプトのために作りました。

:CREATES A CHECK VARIABLE

set lookup=0

:CHECKS IF THE FOLDER ALREADY EXIST"

IF EXIST "%UserProfile%\AppData\Local\CounterPath\RegNow Enhanced\default_user\" (set lookup=1)

:IF CHECK is still 0 which means does not exist. It creates the folder

IF %lookup%==0 START "" mkdir "%UserProfile%\AppData\Local\CounterPath\RegNow Enhanced\default_user\"
0
Winston