Yanıtlar:
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
Barlop tarafından eklendi
Yukarıdakiler bu özel durum için çalışsa da, başlık özellikle bir dizin için test etme hakkında diyor. Phogg'un yorumunu kullanmak if exist mydirname\
yerine kullanmaktır if exist mydirname
. Bazı cevaplar \ nul kullandı ama \ nul NT'de problemli. Son bir ters eğik çizgi dahil değil bir dosyayı veya dizini test eder. Bu nedenle, bir dizin için sondaki ters eğik çizgiyi ekleyin.
if exist mydirname\
söylediğiniz gibi. Alternatif olarak, aslında bir test
ikili dosya alıp Windows'ta kullanabilirsiniz.
mkdir
.
if not 1==1 echo hmm
yazabilirsiniz ya da varsa myDirName \ ELSE blahblahblah
İşte şimdi öğrendiklerim:
Bir boş dosya olup olmadığını test edebilirsiniz; Eğer dizin varsa, bir nul dosyası içerecektir, eğer nul dosyası yoksa o zaman dizin yoktur.
IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
if exist dirname
Windows NT'ye özgü görünüyor.
\nul
, artık Windows NT'de gerekli değil, düz if exist "C:\Program Files (x86)"
çalışmalı (hala Windows 98'i hedeflemediğiniz sürece ...)
Bir eğik çizgi kullanın, eğik çizgi değil: myDirName\nul
değilmyDirName/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 bir dizindir
- çubuk bir dosyadır
- xyz mevcut değil
düzenleme: bu yalnızca dizin adı boşluk içermiyorsa çalışır
Bazıları bunu yapmayı önerdi, ama bu NT'de güvenilir bir şekilde çalışmıyor gibi görünüyor
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
Soru yeniden
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'de de aynı problemi yaşamaya başladığımda, Joe'nun neden bir oyu olmadığını merak ettim.
Var ise dosya adı \ NUL
hem dosyalar hem de dizinler için TRUE döndürüyordu. Www.robvanderwoude.com/battech_ifexistfolder.php adresinde alternatif bir çözüm buldum ve DVF'nin FOR döngüsünün gözden geçirilmiş bir versiyonunu gördüm :
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 ) ) )
Birçoğunun dosya ve klasörleri ayırt etmede problemleri olduğunu gördüm. Biri var olup olmadığını kontrol ettikten sonra basitçe cd yazmayı denemiş mi? Sonra cd ya başarılı veya başarısız olacaktır.
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
İlk satırdan sonraki tüm oluşumlar olmalıdır %MyDir%
. (2) Çok seviyeli bir yol adı (örneğin ) veya mutlak bir yol adı (örneğin ) cd ..
ise %MyDir%
, istediğiniz şeyi yapmayacaktır . / Ve / veya kullanarak düşünün . Pictures\cats
\Windows
pushd
popd
setlocal
Bir klasör bulmak bu kadar zor olmamalı. Benim çözümüm perl kullanın:
($ cnt = $ # ARGV; $ cnt> = 0; - $ cnt) için { if (-d "$ ARGV [$ cnt]") { print "argv [$ cnt] = $ ARGV [$ cnt] bir klasördür \ n"; $ dir = $ ARGV [$ cnt]; break; } Başka { print "argv [$ cnt] = $ ARGV [$ cnt] bir klasör değil \ n"; } }
mkdir -p myDirName
. Görece basit bash betiğini bat-sh * t (bir fonksiyonun sonucunu bir değişkene atama?) 'Ya çevirmeye çalışarak geçen günleri harcadıktan sonra, insanların sadece cygwin'i kurmasına karar verdim.