elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Problema con condigo If Exist y For
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con condigo If Exist y For  (Leído 8,442 veces)
xBart

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Re: Problema con condigo If Exist y For
« Respuesta #10 en: 11 Noviembre 2017, 04:13 am »

Disculpa la tardanza, me ocupé. El ultimo código que me mandas no funciona, abre únicamente la calculadora, estén o no estén los archivos con las extensiones mencionadas.


En línea

Un  usuario mas de la red...
xBart

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Re: Problema con condigo If Exist y For
« Respuesta #11 en: 11 Noviembre 2017, 04:23 am »

Ya pude hacer funcionar mi código, y en efecto, estaba mal acomodado la ultima paréntesis. Al final ha quedado así:

Código:
@ECHO OFF
for %%i in (*.txt *.pdf *.jpg) do (
IF EXIST %%i (goto del) else (goto sla)
:del
echo abrira la calculadora
calc.exe
exit
)
:sla
echo abrira paint
mspaint.exe
cls
pause

En cuanto a tu código también está mal acomodado el ultimo paréntesis. Por lo que quedaría así:
Código:
@echo off
for %%i in (*.txt *.pdf *.jpg) do (IF EXIST %%i (goto del) else (goto sla)
:::::::::::::::::::::::::::::
:del
:::::::::::::::::::::::::::::
echo abrira la calculadora
calc.exe
exit
)
:::::::::::::::::::::::::::::
:sla
:::::::::::::::::::::::::::::
echo abrir paint
mspaint.exe
cls
pause

Espero no verme estúpido, pensando que el código esta escrito o acomodado de la manera correcta. Pero no se tanto de batch.

Gracias por tu ayuda.


En línea

Un  usuario mas de la red...
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Problema con condigo If Exist y For
« Respuesta #12 en: 11 Noviembre 2017, 13:20 pm »

Hola. Siento decir que tú código sigue estando mal... primero de todo las etiquetas/subrutinas (:del, :sla) no deben ir nunca dentro del bloque de un búcle, puedes hacerlo, pero es contraproducente y solo conseguirás escribir un código espaguetti. Segundo, la comprobación que pretendes hacer de si el archivo existe o no existe es algo innecesario debido a que si el FOR inicia la iteración entonces ya significa que encontró al menos 1 archivo del patrón de búsqueda de múltiples extensiones que le asignaste...

SI no he entendido mal, si existe al menos 1 archivo de extensión txt,pdf o jpg quieres iniciar la calculadora de Windows, de lo contrario quieres iniciar el MS Paint, pues bien, en ese caso puedes simplificar el código de la siguiente manera:

Código
  1. @Echo OFF
  2.  
  3. FOR %%# in ("*.txt", "*.pdf", "*.jpg") DO (
  4.    REM Iniciar Calculadora de Windows...
  5.    Start /B "Calc" "Calc.exe"
  6.    Exit
  7. )
  8.  
  9. REM Iniciar MS Paint...
  10. Start /B "MSPaint" "MSPaint.exe"

Si por lo contrario lo que quieres hacer es comprobar que exista al menos 1 archivo DE CADA EXTENSIÓN (es decir, al menos 1 archivo txt + 1 archivo pdf + 1 archivo jpg), entonces puedes hacerlo de la siguiente manera:
Código
  1. @Echo OFF
  2.  
  3. IF Exist "*.txt" IF Exist "*.pdf" IF Exist "*.jpg" (
  4.    REM Iniciar Calculadora de Windows...
  5.    Start /B "Calc" "Calc.exe"
  6. ) Else (
  7.    REM Iniciar MS Paint...
  8.    Start /B "MSPaint" "MSPaint.exe"
  9. )
  10.  
  11. Exit /B 0


Saludos.



si, lo querias hacer de esta forma:

Código:
for %%i in (*.txt *.pdf *.jpg) do (
IF EXIST %%i (goto del) else (goto sla)

déjame decirte que el *.pdf *.jpg no tenían ninguna función hay.

ya que el BATCH al verificar si existe algún txt  "*.txt" va a obviar los  *.pdf *.jpg .

no se si me explico . lo que quiero decir es que si quieres que el batch busque *.pdf *.jpg tienes que hacerlo por paso . como el code que te puse . en cambio si lo haces de la forma for %%i in (*.txt *.pdf *.jpg) que de paso esta mal codeado , el batch va a obviar los *.pdf *.jpg osea no los va a buscar.

Todo eso que has dicho es simplemente falso, pura desinformación que o bien te la has inventado, o no sé de que ignorante informático lo habrás sacado por Internet. Ya te lo dije en el pasado: infórmate y verifica las cosas antes de afirmar cosas sin saber, por favor, por que así no ayudas a los demás, más bien consigues lo opuesto.

El comando FOR acepta como argumento múltiples patrones de búsqueda. separados por los delimitadores soportados (espacio en blanco, coma, o punto y coma)

Un saludo.
« Última modificación: 11 Noviembre 2017, 13:46 pm por Eleкtro » En línea

xBart

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Re: Problema con condigo If Exist y For
« Respuesta #13 en: 12 Noviembre 2017, 00:52 am »

Gracias Elektro, y en efecto, tenia la "corazonada" que se podría lograr con el comando For, para englobar varías extensiones. Como también tenía la corazonada de que mi código este mal, aunque funciona, no estoy tranquilo de que haya quedado así.

Una pregunta, ¿es posible que if exit verifique si existe "x" extensión, aunque este esté oculta? o es necesario usar el attrib antes de que if exit haga una verificación?

Gracias
En línea

Un  usuario mas de la red...
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Problema con condigo If Exist y For
« Respuesta #14 en: 12 Noviembre 2017, 06:52 am »

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:

Código
  1. FOR /F %%# In (
  2.    'Dir /B /A "*.txt", "*.pdf", "*.jpg"'
  3. ) Do (
  4.    Echo.%%~f#
  5. )

Como alternativa para trabajar con archivos ocultos también puedes utilizar el comando FORFILES, para una sola extensión:
Código
  1. FORFILES /M "*.txt" -C "CMD.exe /C Echo.@path"

O para múltiples extensiones:
Código
  1. 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:
Código
  1. FOR %%# In ("txt", "pdf", "jpg") Do (
  2.    (FORFILES -m "*.%%#" -C "CMD.exe /C Echo.@path")2>NUL
  3. )
( 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
Código
  1. [String[]]$files = Get-ChildItem -ErrorAction Continue `
  2.                                 -Force `
  3.                                 -File `
  4.                                 -Path ".\*" `
  5.                                 -Include "*.txt", "*.pdf", "*.jpg"
  6.  
  7. #foreach ($file in $files) {
  8. #    Write-Host $file
  9. #}
  10.  
  11. If ($files.Count -gt 0) {
  12.    # Se encontró al menos 1 archivo de alguna de las extensiones especificadas.
  13.    Write-Host "Launching Windows Calculator..."
  14.    Start-Process -FilePath "Calc.exe"
  15.  
  16. } Else {
  17.    # No se encontró ningún archivo.
  18.    Write-Host "Launching MS Paint..."
  19.    Start-Process -FilePath "MSPaint.exe"
  20.  
  21. }
  22.  
  23. Exit(0)

Saludos.
« Última modificación: 12 Noviembre 2017, 07:42 am por Eleкtro » En línea

xBart

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Re: Problema con condigo If Exist y For
« Respuesta #15 en: 13 Noviembre 2017, 04:17 am »

Gracias por tu ayuda Elektro   ;-)

En línea

Un  usuario mas de la red...
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con condigo php
PHP
Dannysoft 6 2,411 Último mensaje 18 Noviembre 2008, 12:55 pm
por willyhunting
[Perl] File Exist
Scripting
Niko^ 8 5,007 Último mensaje 16 Diciembre 2010, 15:32 pm
por ~ Yoya ~
Ayuda con condigo
Java
Erick9536 1 1,679 Último mensaje 8 Abril 2012, 15:50 pm
por Proteus1989
Ayuda con Pirámide en condigo C
Programación C/C++
rafa_rdj 3 4,351 Último mensaje 29 Abril 2015, 03:59 am
por engel lex
[BATCH] If TEXT exist...
Scripting
Tino 3 2,411 Último mensaje 24 Septiembre 2016, 22:29 pm
por Tino
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines