Windowsでディレクトリが存在するかどうかをチェックするには?
このLinux/BashスクリプトをWindowsシェルに翻訳したいのですが:
if test -d myDirName; then echo "ok"; else mkdir myDirName; fi
ディレクトリが存在するかどうかをテストし、存在しなければ作成します。
このLinux/BashスクリプトをWindowsシェルに翻訳したいのですが:
if test -d myDirName; then echo "ok"; else mkdir myDirName; fi
ディレクトリが存在するかどうかをテストし、存在しなければ作成します。
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
Added by Barlop
上記はこの特定の状況では動作しますが、タイトルにはディレクトリに特化したテストについて書かれています。Phoggさんのコメントでは、if exist mydirname
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
`
Added by Barlop
上記はこの特定の状況では動作しますが、タイトルにはディレクトリに特化したテストについて書かれています。Phoggさんのコメントでは、ではなくif exist mydirname
を使った方が良いとのこと。いくつかの回答では \nulを使っていますが、NTでは問題があります。最後のバックスラッシュを入れないと、ファイルかディレクトリかわからなくなります。なので、ディレクトリの場合は最後のバックスラッシュを入れてください。
前方スラッシュではなくバックスラッシュを使ってください: myDirName\nul
not 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 は存在しません
編集: これはディレクトリ名にスペースが含まれていない場合にのみ動作します。
Some have suggested have doing \nul, but that doesn’t seem to work reliably in 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
Re the question
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で同じような問題を経験していたので、なぜjoeがダウンボードを持っていたのか不思議に思いました、すなわち、
IF EXIST filenameNUL
がファイルとディレクトリの両方で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
)
私はdir /d | findstr \[\.\.\]
を使用することを好む:
2>nul dir /d "myDirName" | findstr \[\.\.\] >nul && echo= "ok" || mkDir myDirName&&echo= Is NOT dir
2>nul dir /d "myDirName" | findstr \[\.\.\] >nul && echo= "ok" || mkDir myDirName
もし存在するかどうかとエラーを無視するために作成するために…
2>nul mkDir myDirName
また….
if exist "myDirName\." (echo/"ok") else mkdir myDirName
rem :: or direct create myDirName hidden/ignoring error
2>nul mkdir myDirName & if exist "myDirName\." echo/ exist
rem :: output: exist
フォルダを探すのはこんなに難しいことではありません。私の解決策は、perlを使用します:
for($cnt=$#ARGV; $cnt\>=0; --$cnt) { if ( -d "$ARGV[$cnt]" ) { print "argv[$cnt]=$ARGV[$cnt] is a folder\n"; $dir = $ARGV[$cnt]; break; } else { print "argv[$cnt]=$ARGV[$cnt] is Not a folder\n"; } }