如何检查给定路径是否指向文件或目录?

时间:2011-11-28 10:45:35

标签: windows batch-file command-line cmd

如何找出例如C:\Windows\something.tmp是文件还是目录?

有时,应用程序会将其临时数据写入带扩展名的文件夹,删除目录与删除文件不同。所以我必须为此调用一个不同的子程序。

3 个答案:

答案 0 :(得分:1)

How to test if a file is a directory in a batch script?

简而言之:

FOR %%i IN (%VAR%) DO IF EXIST %%~si\NUL ECHO It's a directory

但所有积分都转到Dave Webb

答案 1 :(得分:1)

您可以使用dir /a-d告诉您

如果我检查错误级别,它会告诉我

使用文件

C:\Users\preet>echo. > something.tmp

C:\Users\preet>dir /a-d something.tmp > nul & echo %errorlevel%
1

C:\Users\preet>del something.tmp

目录

C:\Users\preet>md something.tmp

C:\Users\preet>dir /a-d something.tmp > nul & echo %errorlevel%
File Not Found
0

答案 2 :(得分:1)

以下解决方案适用于普通和网络案例。有很多混乱,甚至有关于区分文件和文件夹的激烈争论。一个原因是,从MS-DOS时代开始熟悉的方法(测试为nul)不再是区分Windows命令行中的文件和文件夹的有效解决方案。 (这变得复杂了。)

@echo off & setlocal enableextensions
if "%~1"=="" (
  echo Usage: %~0 [FileOrFolderName]
  goto :EOF)
::
:: Testing
call :IsFolderFn "%~1" isfolder_
call :IsFileFn "%~1" isfile_
echo "%~f1" isfile_=%isfile_% isfolder_=%isfolder_%
endlocal & goto :EOF
::
:: Is it a folder
:: First the potential case of the root requires special treatment
:IsFolderFn
setlocal
if /i "%~d1"=="%~1" if exist "%~d1\" (
  set return_=true& goto _ExitIsFolderFn)
if /i "%~d1\"=="%~1" if exist "%~d1" (
  set return_=true& goto _ExitIsFolderFn)
set return_=
dir /a:d "%~1" 2>&1|find "<DIR>">nul
if %errorlevel% EQU 0 set return_=true
:_ExitIsFolderFn
endlocal & set "%2=%return_%" & goto :EOF
::
:: Is it just a file
:IsFileFn
setlocal
set return_=
if not exist "%~1" goto _ExitIsFileFn
call :IsFolderFn "%~1" isfold_
if defined isfold_ goto _ExitIsFileFn
dir /a:-d "%~1" 2>&1 > nul
if %errorlevel% EQU 0 set return_=true
:_ExitIsFileFn
endlocal & set "%2=%return_%" & goto :EOF

最初来自http://www.netikka.net/tsneti/info/tscmd075.htm