很多时候,我们需要对某个路径进行判断:这到底是文件的路径还是文件夹的路径?可以用以下几种方法:
1、直接检测法:如果是文件夹,则 test 和 test\ 、test\. 、test\nul 是等同的;如果是文件,则test不等同于三者中的任何一个,利用这个原理,可以轻松地用 if exist 语句来检测。- @echo off
- if exist test\ (echo test 是文件夹) else echo test 是文件
- pause
复制代码
- @echo off
- if exist test\. (echo test 是文件夹) else echo test 是文件
- pause
复制代码
- @echo off
- if exist test\nul (echo test 是文件夹) else echo test 是文件
- pause
复制代码 2、跳转法:如果是文件夹,将能正确执行跳转命令;如果是文件,执行跳转命令时将发生错误。- @echo off
- cd /d test && (echo test 是文件夹) else echo test 是文件
- pause
复制代码
- @echo off
- popd test && (echo test 是文件夹) else echo test 是文件
- pause
复制代码 3、属性检测法:用 for 语句中的 %%~ai 扩展来检测文件的属性,如果是文件夹,则会显示 d 属性;如果是文件,不显示 d 属性;另外一种方法:把 dir /a-d 语句放到for语句中,通过检测for语句是否有输出来确定是文件还是文件夹。- @echo off
- setlocal enabledelayedexpansion
- for %%i in (test) do (
- set str=%%~ai
- if "!str:~0,1!"=="d" (echo %%i 是文件夹) else echo %%i 是文件
- )
- pause
复制代码
- @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
复制代码 是否还有其他方法,请大家讨论。
——————————————————————————————————
随风在2楼提供了一种简洁的方法(这种方法的使用需要注意 && 和 || 的位置。还可以用 dir /a-d 的格式,请各位自行测试):- @echo off
- dir/ad test >nul 2>nul&&echo test 是文件夹||echo test 是文件
- pause
复制代码
4、创建虚拟盘法:如果是文件夹,将能创建虚拟盘符;如果是文件,将无法创建虚拟盘;( 随风 提供)
- @echo off
- subst 1: test >nul 2>nul&&(echo test 是文件夹&subst 1: /d)||echo test 是文件
- pause
复制代码
|