sé la prueba if exist path\nul
para una carpeta que se utiliza para trabajar en MS-DOS. No sé si se rompió con la introducción de nombres de archivo largos.
Sabía que if exist "long path\nul"
no funciona en el lote de Windows. No me di cuenta hasta hoy que if exist path\nul
funciona en Vista y más allá, siempre y cuando el camino esté en el formato corto 8.3.
Parece que el código original funciona en Vista. Parece que también debería funcionar en XP, pero creo que el siguiente error de XP se interpone en el camino: Batch parameter %~s1 gives incorrect 8.3 short name.
El código original no necesita el bucle FOR, simplemente podría utilizar %~s1
Aquí es una variación que clasifica completamente un camino no son válidos, archivo o carpeta. Funciona en Vista, pero NO funciona en XP debido al error %~s1
. No estoy seguro de cómo funciona en MS-DOS.
EDITAR 12/08/2015: Hay una serie de situaciones de Windows, donde esta falla
@echo off
if not exist "%~1" (set "type=INVALID") else if exist %~s1\nul (set "type=FOLDER") else (set "type=FILE")
@echo "%~1" = %type%
creo que esta variación trabajará con casi todas las versiones de Microsoft por lotes, incluyendo MS-DOS y Windows XP . (Es obvio que no va a trabajar en las primeras versiones de DOS que no soportan PUSHD)
@echo off
if exist "%~1" (2>nul pushd "%~1" && (popd&set "type=FOLDER") || set "type=FILE") else set "type=INVALID"
echo "%~1" = %type%
ACTUALIZACIÓN 2014-12-26
Estoy bastante seguro de que el siguiente trabajo en todas las versiones de Windows desde XP en adelante, pero solo he probado en Win 7.
Editar 12.08.2015: Este puede fallar en unidades de red porque la prueba carpeta puede reportar falsamente un archivo como una carpeta
@echo off
if exist %1\ (
echo %1 is a folder
) else if exist %1 (
echo %1 is a file
) else (
echo %1 does not exist
)
ACTUALIZACIÓN 2015-12-08
Finalmente, una prueba que realmente debería funcionar en cualquier versión de Windows desde XP en adelante, incluso con unidades de red y rutas UNC
for /f "tokens=1,2 delims=d" %%A in ("-%~a1") do if "%%B" neq "" (
echo %1 is a folder
) else if "%%A" neq "-" (
echo %1 is a file
) else (
echo %1 does not exist
)
Es el pregunta realmente acerca de ms-dos, o acerca de un símbolo del sistema en Windows? ¿Y qué versión? – wimh
mi entorno de prueba son windows 7 x64 y Windows XP, no probé en otras plataformas. Gracias. – aaron