回答:
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
Barlopが追加
上記はこの特定の状況で機能しますが、タイトルはディレクトリ専用のテストについて説明しています。Phoggのコメントを使用if exist mydirname\
するのでif exist mydirname
はなく、使用しています。一部の回答では\ nulを使用していますが、NTでは\ nulに問題があります。末尾のバックスラッシュを含めない場合、ファイルまたはディレクトリをテストします。したがって、ディレクトリの場合は、末尾のバックスラッシュを含めます。
if exist mydirname\
あなたが言うように、最も簡単な答えは残りです。または、実際にtest
バイナリを取得してWindowsで使用することもできます。
mkdir
。
if not 1==1 echo hmm
またはmyDirNameの\ ELSEのblahblahblah存在する場合
ここに私が見つけたものがあります:
NULファイルが存在するかどうかをテストできます。ディレクトリが存在する場合、nulファイルが含まれます。nulファイルが存在しない場合、ディレクトリは存在しません。
IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
if exist dirname
これは、Windows NT固有のように見えるプレーンとは異なり、すべてのWindowsおよびMS-DOSバージョンで機能します。
\nul
、Windows NTではもう必要ありませif exist "C:\Program Files (x86)"
ん。(Windows 98をターゲットにしている場合を除き...)
バックスラッシュではなくスラッシュを使用します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は存在しません
編集:これは、ディレクトリ名にスペースが含まれていない場合にのみ機能します
\ 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>
私はWindows 7で同じ種類の問題を経験していたので、ジョーがなぜダウン投票したのか疑問に思いました
存在する場合filename \ 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 ) ) )
多くの場合、ファイルとフォルダーの区別に問題があります。誰かが存在することを確認した後、単純に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
)
MyDir
最初の行の後のすべての出現はでなければなりません%MyDir%
。(2)複数レベルのパス名(例:)または絶対パス名(例:)であるcd ..
場合、必要な処理は行われません 。/ および/またはの使用を検討してください。%MyDir%
Pictures\cats
\Windows
pushd
popd
setlocal
フォルダを見つけるのはそれほど難しくないはずです。私の解決策は、perlを使用します。
for($ cnt = $#ARGV; $ cnt> = 0;-$ cnt) { if(-d "$ ARGV [$ cnt]"){ print "argv [$ cnt] = $ ARGV [$ cnt]はフォルダーです\ n"; $ dir = $ ARGV [$ cnt]; ブレーク; } else { print "argv [$ cnt] = $ ARGV [$ cnt]はフォルダではありません\ n"; } }
mkdir -p myDirName
。比較的単純なbashスクリプトをbatch-sh * tに変換しようとして(関数の結果を変数に割り当てますか?)