
[分享]批處理判斷是文件還是文件夾的幾種方法 很多時候,我們需要對某個路徑進行判斷:這到底是文件的路徑還是文件夾的路徑?可以用以下幾種方法: 1、直接檢測法:如果是文件夾,則 test 和 test 、test. 、testnul 是等同的;如果是文件,則test不等同于三者中的任何一個,利用這個原理,可以輕松地用 if exist 語句來檢測。
nclick="copycode($('code0'));">復制代碼
- @echo off
- if exist test (echo test 是文件夾) else echo test 是文件
- pause
nclick="copycode($('code1'));">復制代碼
- @echo off
- if exist test. (echo test 是文件夾) else echo test 是文件
- pause
2、跳轉法:如果是文件夾,將能正確執行跳轉命令;如果是文件,執行跳轉命令時將發生錯誤。nclick="copycode($('code2'));">復制代碼
- @echo off
- if exist testnul (echo test 是文件夾) else echo test 是文件
- pause
nclick="copycode($('code3'));">復制代碼
- @echo off
- cd /d test && (echo test 是文件夾) else echo test 是文件
- pause
3、屬性檢測法:用 for 語句中的 %%~ai 擴展來檢測文件的屬性,如果是文件夾,則會顯示 d 屬性;如果是文件,不顯示 d 屬性;另外一種方法:把 dir /a-d 語句放到for語句中,通過檢測for語句是否有輸出來確定是文件還是文件夾。nclick="copycode($('code4'));">復制代碼
- @echo off
- popd test && (echo test 是文件夾) else echo test 是文件
- pause
nclick="copycode($('code5'));">復制代碼
- @echo off
- setlocal enabledelayedexpansion
- for %%i in (test) do (
- set str=%%~ai
- if !str:~0,1!==d (echo %%i 是文件夾) else echo %%i 是文件
- )
- pause
是否還有其他方法,請大家討論。—————————————————————————————————— 隨風在2樓提供了一種簡潔的方法(這種方法的使用需要注意 && 和 || 的位置。還可以用 dir /a-d 的格式,請各位自行測試):nclick="copycode($('code6'));">復制代碼
- @echo off
- set str=
- for /f delims= %%i in ('dir /a-d /b test 2^>nul') do set str=%%i
- if defined str (echo test 是文件) else echo test 是文件夾
- pause
4、創建虛擬盤法:如果是文件夾,將能創建虛擬盤符;如果是文件,將無法創建虛擬盤;( 隨風 提供)nclick="copycode($('code7'));">復制代碼
- @echo off
- dir/ad test >nul 2>nul&&echo test 是文件夾||echo test 是文件
- pause
nclick="copycode($('code8'));">復制代碼
- @echo off
- subst 1: test >nul 2>nul&&(echo test 是文件夾&subst 1: /d)||echo test 是文件
- pause

