如何找出例如C:\Windows\something.tmp
是文件还是目录?
有时,应用程序会将其临时数据写入带扩展名的文件夹,删除目录与删除文件不同。所以我必须为此调用一个不同的子程序。
答案 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