Kiểm tra nếu một thư mục tồn tại bằng cách sử dụng tệp .bat [đã đóng]


160

Tôi muốn có thể kiểm tra xem một thư mục nào đó (FolderA) có tồn tại hay không và nếu có, một thông báo sẽ được hiển thị và sau đó tệp bó sẽ được thoát.

Nếu FolderA không tồn tại, thì tôi muốn kiểm tra xem thư mục khác (FolderB) có tồn tại không. Nếu FolderB không tồn tại, một thông báo sẽ được hiển thị và thư mục sẽ được tạo và nếu FolderB tồn tại, một thông báo sẽ được hiển thị như vậy.

Có ai có bất kỳ ý tưởng nào về mã mà tôi có thể chỉ cần sử dụng trên notepad để tạo một tệp bó để cho phép tôi làm điều này không?

Tất cả điều này cần phải được thực hiện trong một .battập tin.


7
Một tìm kiếm google xuất hiện với Kiểm tra nếu Ổ đĩa hoặc Thư mục tồn tại . Và điều này giải thích chính xác cách thực hiện những gì bạn đang yêu cầu ...
NealB

2
Tìm kiếm "thư mục tệp bó" tồn tại ở đây trên SO tìm thấy Windows Batch File Tìm thư mục nếu không tồn tại tạo rồi di chuyển tệp , cho bạn biết cách xem thư mục có tồn tại hay không. Có những bài viết ở đây về việc tạo một thư mục từ một tệp bó. Vui lòng làm một số nghiên cứu cơ bản trước khi đăng câu hỏi mới; rất có thể câu hỏi đã được hỏi ở đây trước đây. Cảm ơn.
Ken White

3
Lô Windows là ngôn ngữ lập trình, kiểm tra xem tệp tồn tại có phải là tác vụ lập trình không. Xuất hiện về chủ đề.
Audrius Meskauskas

1
Nên được đóng lại dưới dạng song công của Cách kiểm tra nếu một tệp là một thư mục trong tập lệnh bó? thay vì "lạc đề"
Michael Freidgeim

Câu trả lời:


259

Hãy thử sử dụng cái này:

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

Thay yourfilename với tên của tập tin của bạn.

Đối với một thư mục, hãy xem https://jeffpar.github.io/kbarchive/kb/065/Q65994/

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

dấu gạch chéo ngược ('\') dường như đủ để phân biệt giữa các thư mục và các tệp thông thường.


2
Phần thứ hai của câu trả lời của bạn là không đầy đủ.
tmj

4
if exist "c:\folder\nul" echo okđã không làm việc cho tôi dưới Windows 7. Những gì đã làm việc if exist "c:\folder\" echo ok.
Alexander Gelbukh

2
@AlexanderGelbukh - Bạn đã đúng, if exist "networkPath\nul"có thể báo cáo sai một tệp dưới dạng thư mục trên các ổ đĩa mạng Windows. Thật không may, những if exist "networkPath\"vấn đề tương tự. Xem bản cập nhật 2015-12-08 tại stackoverflow.com/a/8669636/1012053 để biết kỹ thuật đáng tin cậy trong tất cả các thử nghiệm của tôi.
dbenham

@AlexanderGelbukh Nó hoạt động mà không có dấu ngoặc kép. Tất nhiên, điều này giới hạn bạn khi có khoảng trắng trong đường dẫn thư mục.
Marc.2377

1
Vâng, không có trích dẫn nó hoạt động. Tuy nhiên, với dấu ngoặc kép, nó không hoạt động ngay cả đối với các ổ đĩa cục bộ: if exist c:\Windows\nul echo oknói ok, nhưng if exist "c:\Windows\nul" echo okkhông nói gì. Như tôi đã nói, trong khi if exist "c:\Program Files\nul" echo okkhông nói gì, if exist "c:\Program Files\" echo oknói okvà do đó hoạt động ngay cả đối với đường dẫn có khoảng trắng.
Alexander Gelbukh

34

Tôi nghĩ rằng câu trả lời là ở đây (có thể trùng lặp):

Làm thế nào để kiểm tra nếu một tập tin là một thư mục trong một tập lệnh bó?

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

Thay thế% VAR% bằng thư mục của bạn. Vui lòng đọc câu trả lời ban đầu vì bao gồm chi tiết về việc xử lý khoảng trắng trong tên thư mục.

Như foxidrive đã nói, điều này có thể không đáng tin cậy trên các cửa sổ lớp NT. Nó hoạt động với tôi, nhưng tôi biết nó có một số hạn chế (mà bạn có thể tìm thấy trong câu hỏi được tham chiếu)

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

nên là đủ cho các cửa sổ hiện đại.


6
Kỹ thuật \ nul không đáng tin cậy trên các cửa sổ lớp NT. Nó vẫn ổn trong MSDOS và Win9x. Giải pháp trong Windows hiện đại chỉ đơn giản là if exist "c\:folder\" echo folder exists
foxidrive

1
Tôi nghĩ rằng điều này cũng được chỉ định trong liên kết tham chiếu.
Cosmin Vană

Vẫn không hiểu lý do tại sao tôi bị hạ cấp (có nghĩa là "Không hữu ích"). Tôi đã thêm tài liệu tham khảo cho câu hỏi trong đó các câu trả lời bao gồm kịch bản cần thiết.
Cosmin Vană

Không hữu ích có thể là do nó không áp dụng được cho các máy hiện tại và câu trả lời trước đó của bạn không tạo ra sự khác biệt nào. Một số người vẫn sẽ đánh giá thấp câu trả lời của bạn vì nó không trả lời câu hỏi như được đặt ra.
foxidrive

2
từ support.microsoft.com/kb/65994 "NUL luôn tồn tại trên ổ đĩa MS-DOS FAT cục bộ" - như trongE:\NUL
CAD bloke
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.