Tôi biết các thử nghiệm if exist path\nul
cho một thư mục đã từng làm việc trên MS-DOS. Tôi không biết nếu nó bị hỏng với việc giới thiệu tên tập tin dài.
Tôi biết rằng if exist "long path\nul"
không hoạt động trên lô Windows. Tôi đã không nhận ra cho đến ngày hôm nay rằng if exist path\nul
hoạt động trên Vista và hơn thế nữa miễn là đường dẫn ở dạng ngắn 8,3.
Mã gốc dường như hoạt động trên Vista. Có vẻ như nó cũng hoạt động trên XP, nhưng tôi tin rằng lỗi XP sau đây đang cản trở: Batch parameter %~s1 gives incorrect 8.3 short name.
Mã gốc không cần FOR loop, nó chỉ đơn giản có thể sử dụng %~s1
Đây là một biến thể hoàn toàn phân loại một con đường như INVALID, file hoặc thư mục. Nó hoạt động trên Vista, nhưng không hoạt động trên XP vì lỗi %~s1
. Tôi không chắc nó hoạt động như thế nào trên MS-DOS.
EDIT 2015/12/08: Có một số tình huống của Windows, nơi này không thành công
@echo off
if not exist "%~1" (set "type=INVALID") else if exist %~s1\nul (set "type=FOLDER") else (set "type=FILE")
@echo "%~1" = %type%
Tôi tin rằng sự thay đổi này sẽ làm việc với hầu hết các phiên bản của Microsoft hàng loạt, bao gồm MS-DOS và XP . (Nó rõ ràng sẽ không hoạt động trên các phiên bản đầu tiên của hệ điều hành DOS không hỗ trợ pushd)
@echo off
if exist "%~1" (2>nul pushd "%~1" && (popd&set "type=FOLDER") || set "type=FILE") else set "type=INVALID"
echo "%~1" = %type%
CẬP NHẬT 2014-12-26
Tôi chắc rằng những điều sau đây sẽ làm việc trên tất cả các phiên bản của Windows từ XP trở đi, nhưng tôi chỉ thử nghiệm trên Win 7.
Sửa 2015/12/08: Đây có thể thất bại trên ổ đĩa mạng vì kiểm tra thư mục sai có thể báo cáo một tập tin như một thư mục
@echo off
if exist %1\ (
echo %1 is a folder
) else if exist %1 (
echo %1 is a file
) else (
echo %1 does not exist
)
CẬP NHẬT 2015-12-08
Cuối cùng - một thử nghiệm thực sự sẽ hoạt động trên bất kỳ phiên bản Windows nào từ XP trở đi, kể cả với các ổ đĩa mạng và đường dẫn UNC
for /f "tokens=1,2 delims=d" %%A in ("-%~a1") do if "%%B" neq "" (
echo %1 is a folder
) else if "%%A" neq "-" (
echo %1 is a file
) else (
echo %1 does not exist
)
là câu hỏi của bạn thực sự về ms-dos, hoặc về một dấu nhắc lệnh trong cửa sổ? Và phiên bản nào? – wimh
môi trường thử nghiệm của tôi là cả windows 7 x64 và windows xp, tôi không thử trên các nền tảng khác. cảm ơn. – aaron