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

4、创建虚拟盘法:如果是文件夹,将能创建虚拟盘符;如果是文件,将无法创建虚拟盘;( 随风 提供)
  1. @echo off
  2. subst 1: test >nul 2>nul&&(echo test 是文件夹&subst 1: /d)||echo test 是文件
  3. pause
复制代码
  1. ::直接拖入文件即可
  2. @echo off
  3. title 参数鉴定  正确率:98%%
  4. set file=%*
  5. setlocal enabledelayedexpansion
  6. for %%a in (!file!) do (
  7. if "%%~nxa" equ "%%~a" (echo "%%~a"  是一个参数) else (
  8.   echo;%%~nxa0|find/i "." >nul&&set bg=1
  9.   if not exist %%~sa (
  10.    echo."%%~a"  无法读取路径
  11.   )
  12.   if not defined bg (echo."%%~a"  是标准的文件夹) else (
  13.    set bg=<nul
  14.    for /f "delims= useback" %%b in ("%%~a") do (
  15.     if not defined %%b (
  16.      set res=1
  17.     )
  18.    )
  19.    if defined res (echo."%%~a"  是普通txt样式&set res=<nul) else (
  20.     echo."%%~a"  是标准的二进制文件
  21.    )
  22.   )
  23. )
  24. )
  25. pause
复制代码
  1. @echo off
  2. set str=
  3. for /f "delims=" %%i in ('dir /a-d /b test 2^>nul') do set str=%%i
  4. if defined str (echo test 是文件) else echo test 是文件夹
  5. pause
复制代码
本人是新手,看了很多namejm的文章,都是受益匪浅。我在实验了上面的批处理时,发现好像出现错误。
  1. dir /a-d /b test
复制代码
上面的命令无论是文件还是文件夹都提示不能找到,导致判断出错。本小白做了下修改,请各路大侠指点:
  1. @echo off
  2. set str=
  3. for /f "delims=" %%i in ('dir /ad /b ^| findstr /be "test" 2^>nul') do set str=%%i
  4. if defined str (echo test 是文件夹) else echo test 是文件
  5. pause
复制代码
批处理专区: BAT CMD DOS
其他脚本区
网络资源区
论坛事务区
[收藏此主题] [关注此主题的新回复]