web-dev-qa-db-ja.com

Windowsにディレクトリが存在するかどうかを確認する方法

私はこのLinux/BashスクリプトをWindowsシェルに翻訳したいと思います。

if test -d myDirName; then echo "ok"; else mkdir myDirName; fi

ディレクトリが存在するかどうかをテストし、存在しない場合は作成します。

57
Pietro
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)

Barlopによって追加されました

上記はこの特定の状況で機能しますが、タイトルはディレクトリのテストについて特に述べています。 Phoggのコメントではなくif exist mydirname\ではなくif exist mydirnameを使用しています。いくつかの答えは\ nulを使っていますが、\ nulはNTでは問題があります。末尾の円記号を含めないと、ファイルまたはディレクトリをテストします。そのため、ディレクトリの場合は、末尾の円記号を含めます。

66
Sathyajith Bhat

これが私がちょうど見つけたものです:

NULLファイルが存在するかどうかをテストできます。ディレクトリが存在すれば、それはヌルファイルを含み、ヌルファイルが存在しなければディレクトリは存在しない。

IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
20
dev008

スラッシュではなくバックスラッシュを使用します。myDirName\nulではなくmyDirName/nul

md foo 
echo.>bar 
for %I in (foo bar xyz) do @( 
  if exist %I ( 
    if exist %I\nul ( 
      echo -- %I is a directory 
    ) else ( 
      echo -- %I is a file 
    ) 
  ) else ( 
    echo -- %I does not exist 
  ) 
)

- fooはディレクトリです
- barはファイルです
- xyzは存在しません

編集:ディレクトリ名にスペースが含まれていない場合にのみ機能します。

11
DVF

何人かは\ nulをすることを提案しました、しかしそれはNTで信頼できるようには思われません

C:\blah>md abc

C:\blah>if exist abc\nul echo yes
yes

C:\blah>if exist "abc\nul" echo yes

C:\blah>

http://www.dostips.com/forum/viewtopic.php?f=3&t=4913

foxidrive writes-

The trick with nul worked in pre NT versions of windows.

Now you would use this, with a trailing backslash.

if exist "C:\abcde\" echo the folder exists

質問を再

C:\blah>if exist "abcd\" (echo yes) else (echo no && mkdir abcd)
no

C:\blah>if exist "abcd\" (echo yes) else (echo no && mkdir abcd)
yes

C:\blah>
5
barlop

私がWindows 7で同じ種類の問題を経験していたのになぜジョーが下落したのかと思いました。

ファイル名が存在する場合\ NUL

ファイルとディレクトリの両方に対してTRUEを返していました。私は www.robvanderwoude.com/battech_ifexistfolder.php で別の解決策を見つけて、DVFのFORループの改訂版を思い付きました:

FOR %I in (foo bar xyz) DO @( PUSHD %I && (POPD & echo -- %I is a directory) || ( IF exist %I ( echo -- %I is a file ) ELSE ( echo -- %I does not exist ) ) )
4
Damian

ファイルとフォルダを区別することに問題があることは多くあります。誰かがそれが存在することを確認した後にそれに単にcdしようとしたことがありますか?そうするとcdは成功するか失敗するでしょう。

set MyDir = "MyTestDir"
IF exist MyDir (
    cd MyDir 
    IF ERRORLEVEL NEQ 0 (
        echo "Error: %MyDir% already exists, but it is a file!"
        exit 1
    ) else (
        # Do not forget to cd back
        cd ..
    )
) else (
   # Did not exist yet, so create it.
   mkdir MyDir
)
1
exist myDirName/nul

また、myDirNameがファイルの場合はtrueですが、whisは検索された機能ではありません

0
Joe