Miren, probé el código de Leo, no funciona bien porque:
por ejemplo:
C:\>code.bat c:\pagefile.sys
Folder
Se podría usar attrib, pero el problema es que attrib no muestra el atributo de directorio, usando una lógica similar a la de Leo de ver los atributos usando for que se expanden más o menos así si son un archivo:
si son un directorio:
si no existen:
pero el problema es que con archivos especiales, como el pagefile.sys el for expande como si no existiera.
hice este código más rebuscado, con validaciones:
@echo off
call :isFolder "%~1"
if errorlevel 0 if not errorlevel 1 (echo.Es archivo)
if errorlevel 1 if not errorlevel 2 (echo.Es directorio)
goto :eof
:isFolder
setlocal enableextensions enabledelayedexpansion
(set n=%~1)
if not defined n (
echo.No se paso ningun parametro.
exit /b 2
)
for %%_ in ("!n!") do set "atr=%%~a_#"
if "#"=="!atr!" (
echo.No se encuentra el archivo o directorio.
exit /b 3
) else (
set i=0
if "!atr:~0,1!"=="d" (set i=1)
)
exit /b %i%
que produce:
C:\>tipo.bat "c:\Archivos de programa"
Es directorio
C:\>tipo.bat "c:\AUTOEXEC.BAT"
Es archivo
C:\>tipo.bat "c:\pagefile.sys"
No se encuentra el archivo o directorio.
si se fijan el pagefile dice que no se encuentra, así es que a mí parecer la mejor forma es la que había puesto en el post anterior:
C:\>if exist "c:\pagefile.sys\" (echo.es directorio) else (
¿Más? if exist "c:\pagefile.sys" (echo.es archivo) else (
¿Más? echo.no existe ))
es archivo
Así es que este código está a prueba de balas.
atr.bat
:funAtr
que devuelve en errorlevel 0 si no existe, 1 si es directorio y 2 si es archivo.
Así que si lo llaman desde otro archivo:
test.bat
que produce:
C:\>test.bat "c:\Archivos de programa"
Es directorio
C:\>test.bat "c:\AUTOEXEC.BAT"
Es archivo
C:\>test.bat "c:\pagefile.sys"
Es archivo
C:\>test.bat c:\dfdsgsfdgfdhfd
No existe
C:\>