Làm cách nào tôi có thể quét đệ quy các thư mục bằng cách sử dụng `NẾU KHÔNG EXIST`?


0

Tôi muốn tạo một tập lệnh bó sẽ tìm kiếm đệ quy IF NOT EXISTcác thư mục được chỉ định bằng cách sử dụng để đưa ra lỗi nếu các thư mục không thể được đặt ở bất cứ đâu. Đây là những gì tôi có cho đến nay:

IF NOT EXIST %FOLDER1% goto :ERROR
IF NOT EXIST %FOLDER2% goto :ERROR
IF NOT EXIST %FOLDER3% goto :ERROR

:ERROR
echo There aren't any folders to clean...
PAUSE goto :END
goto END

Tôi sẽ được thay thế %FOLDER1%, %FOLDER2%, %FOLDER3%với tên gọi khác nhau tùy theo hoàn cảnh và những gì các thư mục cần phải được làm sạch. Dường như tập lệnh hiện tại của tôi chỉ tìm kiếm tệp, làm cách nào để xác định thư mục với cú pháp này?


2
IF NOT EXISTphù hợp với thư mục quá. Xuất hiện với tôi rằng có một vấn đề với logic của kịch bản của bạn - :ERRORluôn luôn chạy. Cố gắng thêm hai dòng echo All Folders Existgoto END, sau IF NOT EXIST %FOLDER3% goto :ERRORvà trước :ERROR. Nó có khắc phục vấn đề của bạn không?
Kenneth L

Điều đó dường như không có bất kỳ ảnh hưởng nào (nếu tôi hiểu chính xác phương pháp của bạn) . Tôi đã sử dụng dấu ngoặc kép cho các thư mục có không gian tên và tôi đã kiểm tra lại cú pháp. Kịch bản chạy chính xác theo cách này ...
Ông Mendelli

2
Nếu bạn muốn làm một cái gì đó đệ quy, bạn sẽ cần một vòng lặp hoặc lệnh thực hiện nó cho bạn. Hiện tại bạn chỉ cần kiểm tra bất cứ khi nào một trong các mục tồn tại. Điều mà @KennethL đang chỉ ra, là bất kể họ có làm gì hay không, bạn sẽ xuất ra "Không có bất kỳ thư mục nào để dọn dẹp". Chỉnh sửa của anh ấy có nghĩa là bạn bỏ qua từ "Dòng 4" đến cuối.
Seth

@ Mr.Mendelli Bạn có thể bao gồm các đầu vào mẫu, ví dụ như cách bạn chạy tệp bó và cấu trúc thư mục, đầu ra hiện tại và đầu ra dự kiến ​​của bạn, v.v.?
Kenneth L

Câu trả lời:


1

Tôi đã bao gồm một cách dễ dàng để bạn thực hiện việc này và duy trì danh sách các thư mục trong cùng một tập lệnh để bạn có thể thay đổi khi cần bằng cách mở tập lệnh và sửa đổi tập lệnh cho phù hợp.

Về cơ bản này sẽ gọi các :Listchương trình con đó sẽ chứa các Arrarybiến và đó là giá trị cách nhau bởi dấu phẩy và được bao bọc bởi dấu ngoặc kép cho mỗi đường dẫn thư mục mà bạn muốn kiểm tra. Sau đó nó sẽ GOTO :EOFđi kiểm soát trở lại với bản gốc CALLvà sau đó với một đơn giản cho vòng lặp bạn có thể lặp lại các %Array%biến giá trị từng người một so với IF NOT EXISTlogic.

@ECHO ON

CALL :List
FOR %%A IN (%Array%) DO (
    IF NOT EXIST "%%~A" ECHO %%~A Does Not Exist
)
EXIT 

:List
::: Maintain your folder paths in the 'SET Array=' as values enclosed by double quotes and separated by commas
SET Array="C:\Folder\Path1", "X:\\Folder\\Math2", "\\server\Bath3", "c:/Folder/Wrath4"
GOTO :EOF

Tài nguyên khác

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.