Как проверить, указывает ли данный путь на файл или каталог? - PullRequest
0 голосов
/ 28 ноября 2011

Как узнать, например, является ли C:\Windows\something.tmp файлом или каталогом?

Иногда приложения записывают свои временные данные в папку с расширением, и удаление каталога отличается от удаления файла. Поэтому я должен вызвать для этого другую подпрограмму.

Ответы [ 3 ]

1 голос
/ 28 ноября 2011

Вы можете использовать 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
1 голос
/ 27 августа 2012

Решение ниже работает как для обычных, так и для сетевых случаев. Существует много путаницы и даже были горячие споры о различении файлов и папок. Одна из причин заключается в том, что метод, знакомый по дням 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

1 голос
/ 28 ноября 2011

Как проверить, является ли файл каталогом в пакетном скрипте?

Короче говоря:

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

Но все кредиты идут на Дейв Уэбб

...