Sprawdzanie, czy istnieje folder przy użyciu pliku .bat [zamknięty]

160

Chciałbym móc sprawdzić, czy istnieje określony folder (FolderA), a jeśli tak, to czy komunikat ma zostać wyświetlony, a następnie plik wsadowy ma zostać zamknięty.

Jeśli FolderA nie istnieje, chciałbym następnie sprawdzić, czy istnieje inny folder (FolderB). Jeśli FolderB nie istnieje, powinna zostać wyświetlona wiadomość i folder powinien zostać utworzony, a jeśli FolderB istnieje, powinna zostać wyświetlona wiadomość o tym.

Czy ktoś ma pomysł na kod, którego mógłbym po prostu użyć w notatniku, aby utworzyć plik wsadowy, który pozwoli mi to zrobić?

Wszystko to należy zrobić w jednym .batpliku.

user3179825
źródło
7
W wyszukiwarce Google pojawia się opcja Testowanie, czy dysk lub katalog istnieje . I to dokładnie wyjaśnia, jak zrobić to, o co prosisz ...
NealB,
2
Wyszukanie hasła „katalog plików wsadowych istnieje” w SO znaleziono plik wsadowy systemu Windows. Poszukaj katalogu, jeśli nie istnieje, utwórz, a następnie przenieś plik , który pokazuje, jak sprawdzić, czy katalog istnieje, czy nie. Znajdują się tutaj również posty dotyczące tworzenia katalogu z pliku wsadowego. Przed wysłaniem nowych pytań przeprowadź podstawowe badania; są duże szanse, że pytanie zostało tu zadane wcześniej. Dzięki.
Ken White,
3
Wsad systemu Windows jest językiem programowania, sprawdź, czy plik istnieje, jest zadaniem programistycznym. Pojawia się na temat.
Audrius Meskauskas
1
Powinien zostać zamknięty jako podwójny opis Jak sprawdzić, czy plik jest katalogiem w skrypcie wsadowym? zamiast „nie na temat”
Michael Freidgeim

Odpowiedzi:

259

Spróbuj użyć tego:

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

Wymienić yourfilename z nazwą pliku.

Aby uzyskać katalog, spójrz na ten https://jeffpar.github.io/kbarchive/kb/065/Q65994/

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

końcowy ukośnik odwrotny („\”) wydaje się być wystarczający do odróżnienia katalogów od zwykłych plików.

09stephenb
źródło
2
Druga część Twojej odpowiedzi jest niekompletna.
tmj
4
if exist "c:\folder\nul" echo oknie działa dla mnie pod Windows 7. Co zadziałało if exist "c:\folder\" echo ok.
Alexander Gelbukh
2
@AlexanderGelbukh - Masz rację, if exist "networkPath\nul"może fałszywie zgłosić plik jako folder na dyskach sieciowych Windows. Niestety if exist "networkPath\"cierpi na ten sam problem. Zobacz aktualizację 2015-12-08 na stackoverflow.com/a/8669636/1012053, aby poznać technikę, która była niezawodna we wszystkich moich testach.
dbenham
@AlexanderGelbukh Działa bez cudzysłowów. Oczywiście ogranicza to cię, jeśli chodzi o spacje w ścieżce katalogu.
Marc 2377
1
Tak, bez cytatów to działa. Jednak z cudzysłowami nie działa nawet na dyskach lokalnych: if exist c:\Windows\nul echo okmówi ok, ale if exist "c:\Windows\nul" echo oknic nie mówi. Jak już powiedziałem, podczas gdy if exist "c:\Program Files\nul" echo oknic nie mówi, if exist "c:\Program Files\" echo okmówi, oka zatem działa nawet dla ścieżki ze spacjami.
Alexander Gelbukh
34

Myślę, że odpowiedź jest tutaj (prawdopodobnie duplikat):

Jak sprawdzić, czy plik jest katalogiem w skrypcie wsadowym?

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

Zastąp% VAR% swoim katalogiem. Przeczytaj oryginalną odpowiedź, ponieważ zawiera szczegółowe informacje na temat obsługi spacji w nazwie folderu.

Jak powiedział foxidrive, może to nie być niezawodne w oknach klasy NT. U mnie działa, ale wiem, że ma pewne ograniczenia (które można znaleźć w przywoływanym pytaniu)

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

powinno wystarczyć dla nowoczesnych okien.

Cosmin Vană
źródło
6
Technika \ nul nie jest niezawodna w oknach klasy NT. Jednak było dobrze w MSDOS i Win9x. Rozwiązanie we współczesnym Windowsie jest proste if exist "c\:folder\" echo folder exists
foxidrive
1
Myślę, że jest to również określone w odnośniku.
Cosmin Vană,
Nadal nie rozumiem, dlaczego zostałem odrzucony (co oznacza „nieprzydatny”). Dodałem odniesienie do pytania, w którym odpowiedzi obejmują wymagany scenariusz.
Cosmin Vană,
Może to być nieprzydatne, ponieważ nie ma zastosowania do obecnych komputerów, a Twoja wcześniejsza odpowiedź nie zawierała żadnego rozróżnienia. Niektórzy ludzie nadal będą odrzucać Twoją odpowiedź, ponieważ nie odpowiada ona na zadane pytanie.
foxidrive
2
from support.microsoft.com/kb/65994 "NUL zawsze istnieje na lokalnym dysku MS-DOS FAT" - jak wE:\NUL
CAD bloke