2015-04-28 13 views
5

Tôi đang cố gắng để làm như sau:file Batch: Nếu thư mục tồn tại, làm điều gì đó

IF EXISTS ("C:\Users\user\Desktop\folder1\") { 

MOVE "C:\Users\user\Desktop\folder2\" "C:\Users\user\Desktop\folder1\" 
RENAME "C:\Users\user\Desktop\folder1\folder2\" "folder3" 

} else { 

MKDIR "C:\Users\user\Desktop\folder1\" 
MOVE "C:\Users\user\Desktop\folder2\" "C:\Users\user\Desktop\folder1\" 
RENAME "C:\Users\user\Desktop\folder1\folder2\" "folder3" 
} 

Với đoạn mã sau:

@ECHO ON 

IF EXIST "C:\Users\user\Desktop\folder1\" (GOTO MOVER) 

PRINT "It doesn't exists - This is just for debugging" 
PAUSE 

:MOVER 
ECHO "MOVER" 
PAUSE 
EXIT 
:END 

Nhưng hệ thống không in dòng chữ thử nghiệm.

+0

Bạn đang cố gắng in trên bảng điều khiển hoặc trên giấy? Lệnh PRINT có thể không phải là lệnh bạn đang tìm kiếm, hãy thử ECHO. –

+0

Đó chỉ là để gỡ lỗi mã và để chắc chắn rằng hệ thống đang thực hiện điều đó. Tôi là plannig để thay thế nó bằng các lệnh MKDIR, MOVE và RENAME. –

Trả lời

3

IF EXIST chỉ kiểm tra xem tệp có tồn tại hay không và không thể kiểm tra thư mục. Thông thường, bạn thử nghiệm như thế này

IF NOT EXIST "myfolder\NUL" mkdir "myfolder" 

Thiết bị giả NUL hoạt động như một tệp và thực tế tồn tại trong mỗi thư mục. Lưu ý chính tả.

Nhưng tôi đã thấy rằng thử nghiệm không thành công trong các lô theo lô, vì các lý do không xác định. Vì vậy, tôi đề nghị này để thay thế:

CD myfolder 2>NUL && CD .. || MD myfolder 

CD myfolder cố gắng một hoạt động pháp lý với các thư mục và các điều kiện thực hiện của MD/MKDIR tạo thư mục chỉ khi đó hoạt động thất bại. CD .. hoàn nguyên hành động nếu thư mục cần tồn tại. 2>NUL chặn thông báo lỗi nếu thư mục không tồn tại.

chỉnh sửa: ràng có một phương pháp đơn giản để thử nghiệm: thêm một dấu chéo ngược (\) vào tên thư mục để làm cho nó cú pháp một thư mục, như thế này:

if not exist myfolder\ md myfolder || goto :EOF 

Điều này sẽ tạo ra các thư mục " myfolder "nếu nó chưa tồn tại. Ngoài ra, trong trường hợp có một tệp có tên "myfolder", MD sẽ không thành công và tệp lô sẽ bị chấm dứt sau khi thông báo lỗi được hiển thị. Ngoài ra, ERRORLEVEL sẽ được đặt. Tôi thích điều này hơn vì đầu ra lỗi không phải được chuyển hướng.

chỉnh sửa: Nếu bạn muốn thực hiện một số lệnh, chạy chúng trong một subshell, nghĩa là đặt chúng trong parantheses như thế này:

if not exist myfolder\ ( 
    md myfolder 
    dir myfolder 
    REM ...or run any other commands 
) || goto :EOF 
+0

Vì vậy, nếu tôi cần thực hiện một số lệnh ... nó sẽ như thế nào? –

+0

Các lệnh là MKDIR, MOVE và RENAME. –

+0

@Julian: Tôi đã chỉnh sửa câu trả lời của mình để chỉ cho bạn cách thực hiện một nhóm lệnh. – user1016274

0

NẾU TỒN TẠI có thể kiểm tra thư mục tôi sử dụng nó theo cách này:

IF EXIST %local_path%\opensource\eclipse rmdir %local_path%\opensource\eclipse /s /q >nul 
Các vấn đề liên quan