Bir .bat dosyası kullanarak bir klasörün bulunup bulunmadığını kontrol etme [kapalı]


160

Belirli bir klasörün (FolderA) var olup olmadığını ve bir mesajın görüntülenmesini ve ardından toplu iş dosyasından çıkılmasını kontrol etmek istiyorum.

FolderA yoksa, başka bir klasör (FolderB) olup olmadığını kontrol etmek istiyorum. FolderB mevcut değilse, bir mesaj gösterilmeli ve klasör oluşturulmalı ve FolderB mevcutsa, bunu söyleyen bir mesaj gösterilmelidir.

Herkes bunu yapmak için izin vermek için bir toplu iş dosyası oluşturmak için not defteri üzerinde kullanabilirsiniz kod hakkında herhangi bir fikri var mı?

Tüm bunların tek bir .batdosyada yapılması gerekir .


7
Bir Google arama, bir Sürücü veya Dizin Varsa Test Edilir ile gelir . Ve bu tam olarak ne istediğini açıklıyor ...
NealB

2
SO'da bulunan "toplu iş dosyası dizini" için bir arama burada bulundu Windows Toplu Dosya Varsa dizini arayın create sonra move dosyası , bir dizinin var olup olmadığını nasıl göreceğinizi gösterir. Burada da bir toplu iş dosyasından dizin oluşturma hakkında gönderiler var. Lütfen yeni sorular göndermeden önce bazı temel araştırmalar yapın; burada daha önce soru sorulmuş olabilir. Teşekkürler.
Ken White

3
Windows toplu iş bir programlama dilidir, dosyanın var olup olmadığını kontrol etmek bir programlama görevidir. Konu hakkında görünür.
Audrius Meskauskas

1
Bir dupicate olarak kapatılmalıdır bir dosya bir toplu komut dosyasında bir dizin ise nasıl test edilir? konu dışı "yerine
Michael Freidgeim

Yanıtlar:


259

Bunu kullanmayı deneyin:

IF EXIST yourfilename (
echo Yes 
) ELSE (
echo No
)

Değiştir DosyaAdınız dosyanızın adı ile.

Bir dizin için şu https://jeffpar.github.io/kbarchive/kb/065/Q65994/ adresine bakın.

C:
IF NOT EXIST C:\WIN\ GOTO NOWINDIR
CD \WIN
:NOWINDIR

izleyen ters eğik çizgi ('\') dizinler ve sıradan dosyalar arasında ayrım yapmak için yeterli gibi görünüyor.


2
Cevabınızın ikinci kısmı eksik.
tmj

4
if exist "c:\folder\nul" echo okWindows 7 altında benim için çalışmadı if exist "c:\folder\" echo ok.
Alexander Gelbukh

2
@AlexanderGelbukh - Doğru, if exist "networkPath\nul"bir dosyayı Windows ağ sürücülerinde yanlış bir klasör olarak bildirebilirsiniz. Ne yazık ki, if exist "networkPath\"aynı sorun yaşıyor. Tüm testlerimde güvenilir olan bir teknik için stackoverflow.com/a/8669636/1012053 adresindeki 2015-12-08 güncellemesine bakın .
dbenham

@AlexanderGelbukh Tırnak işaretleri olmadan çalışır. Tabii ki, bu dizin yolunda boşluklar söz konusu olduğunda sizi sınırlar.
Marc.2377

1
Evet, tırnak işaretleri olmadan çalışır. Ancak, tırnaklarla yerel sürücüler için bile çalışmaz: if exist c:\Windows\nul echo okdiyor ok, ama if exist "c:\Windows\nul" echo okhiçbir şey söylemiyor. Söylediğim gibi, if exist "c:\Program Files\nul" echo okhiçbir şey söylemese de, boşluklu yol için bile if exist "c:\Program Files\" echo oksöylüyor okve çalışıyor.
Alexander Gelbukh

34

Bence cevap burada (muhtemelen tekrar):

Bir dosyanın toplu komut dosyasındaki bir dizin olup olmadığı nasıl test edilir?

IF EXIST %VAR%\NUL ECHO It's a directory

% VAR% öğesini dizininizle değiştirin. Klasör adındaki beyaz boşlukları işleme hakkında ayrıntılar içerdiğinden lütfen orijinal yanıtı okuyun.

Foxidrive'ın dediği gibi, bu NT sınıfı pencerelerde güvenilir olmayabilir. Benim için çalışıyor, ancak bazı sınırlamaları olduğunu biliyorum (ki bu başvurulan soruda bulabilirsiniz)

if exist "c:\folder\" echo folder exists 

modern pencereler için yeterli olmalıdır.


6
\ Nul tekniği NT sınıf pencerelerinde güvenilir değildir. Ancak MSDOS ve Win9x'te iyiydi. Modern Windows'daki çözüm basittir if exist "c\:folder\" echo folder exists
foxidrive

1
Ben de bu başvurulan bağlantıda belirtildiğini düşünüyorum.
Cosmin Vană

Hala neden reddedildim anlamıyorum ("Faydalı değil" anlamına gelir). Cevapların gerekli senaryoyu kapsadığı soruya referans ekledim.
Cosmin Vană

Faydalı olmayabilir, çünkü mevcut makineler için geçerli değildir ve önceki cevabınız herhangi bir ayrım yapmamıştır. Bazı insanlar yine de cevabınızı aşağıya vuracaklardır çünkü soruyu olduğu gibi cevaplamamaktadır.
foxidrive

2
dan support.microsoft.com/kb/65994 "NUL her zaman yerel MS-DOS FAT sürücüde var" - gibiE:\NUL
that bloke CAD
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.