Una pregunta, ¿es posible que if exit verifique si existe "x" extensión, aunque este esté oculta?
Si, el comando
IF por defecto trabaja con archivos ocultos. El que omite archivos ocultos es el
FOR, al menos de la forma en la que lo estás usando ahora mismo...
Para que el comando
FOR encuentre archivos ocultos, tienes que usar un
FOR /F y pasarle como argumento el comando
DIR con el modificador
/A para listar archivos ocultos:
'
Dir /B /A "*.txt", "*.pdf", "*.jpg"'
)
Como alternativa para trabajar con archivos ocultos también puedes utilizar el comando
FORFILES, para una sola extensión:
FORFILES /M "*.txt" -C "CMD.exe /C
Echo.
@path"
O para múltiples extensiones:
FORFILES -C "CMD.exe /C
(If @ext==\"txt\"
Echo.
@path
) & (If @ext==\"pdf\"
Echo.
@path
) & (If @ext==\"jpg\"
Echo.
@path
)"
...También puedes combinar el uso de
FOR y
FORFILES para acortar esa sintaxis tan fea y larga de
FORFILES al trabajar con múltiples extensiones:
FOR %%#
In ("txt", "pdf", "jpg"
) Do ( (FORFILES -m "*.
%%#" -C "CMD.exe /C
Echo.
@path"
)2
>NUL )
( Nótese que en esta ocasión a los argumentos/extensiones del
FOR no le añadí wildcards, ahora se tratan como un simple Array de cadenas en lugar de patrones de búsqueda, por que como ya dijimos el comando
FOR omite archivos ocultos. )
De todas formas Batch es una herramienta muy inutil y limitada incluso para este tipo de tareas, se ha vuelto casi obsoleta. Como ya has podido ver en los ejemplos de arriba, cada uno tiene sus ventajas y sus desventajas. En lugar de utilizar
Batch, en
Windows te recomiendo encarecidamente utilizar el lenguaje
Powershell:
script.ps1[String[]]$files = Get-ChildItem -ErrorAction Continue `
-Force `
-File `
-Path ".\*" `
-Include "*.txt", "*.pdf", "*.jpg"
#foreach ($file in $files) {
# Write-Host $file
#}
If ($files.Count -gt 0) {
# Se encontró al menos 1 archivo de alguna de las extensiones especificadas.
Write-Host "Launching Windows Calculator..."
Start-Process -FilePath "Calc.exe"
} Else {
# No se encontró ningún archivo.
Write-Host "Launching MS Paint..."
Start-Process -FilePath "MSPaint.exe"
}
Exit(0)
Saludos.