Autor Tema: ¿Qué estoy malinterpretando en este código sobre abrir una carpeta y luego un ar

0 Usuarios y 1 Visitante están viendo este tema.

15 Agosto, 2024, 05:55 am
Leído 750 veces

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Intento hacer un archivo bat en Windows 7 que abra una carpeta y recién cuando esté abierta, abra un archivo en una ventana maximizada.

GPT me dijo que haga un archivo vbs así:
Código: [Seleccionar]
Set objShell = CreateObject("Shell.Application")
For Each wnd In objShell.Windows
    If InStr(wnd.LocationURL, "http://file:///CARPETA") > 0 Then
        WScript.Quit(0)
    End If
Next

WScript.Quit(1)
Luego un bat así:
Código: [Seleccionar]
@echo off
start "" "%windir%\explorer.exe" "CARPETA"

:LOOP
cscript //nologo CheckFolder.vbs
if %errorlevel% equ 0 (
    timeout /t 1 /nobreak >nul
    goto :LOOP
)

start "" /max "notepad.exe" "ARCHIVO"
Eso no funciona, el archivo se abre antes. ¿Qué hace exactamente ese bat? Por lo que yo interpreto, empieza a abrir la carpeta, y luego inicia una repetición: Ejecuta el código vbs (si la carpeta está abierta el mensaje es 0, sino 1), si el mensaje es 0 (carpeta abierta) lo repite, sino abre el archivo. Por lo que entiendo, si llegara a detectar que la carpeta está abierta, el código no se detendría, está mal ¿no?

Del bat cambié ese 0 por un 1. Ahora no abre el archivo. Mi interpretación es: Empieza a abrir la carpeta, y luego inicia una repetición: Ejecuta el código vbs (si la carpeta está abierta el mensaje es 0, sino 1), si el mensaje es 0 (carpeta abierta) el programa termina la repetición y abre el archivo, sino ejecuta de nuevo el código, hasta que detecte la carpeta abierta. Pero no lo hace, ahora el bat no se cierra ni abre el archivo, como si el loop no tuviera fin ¿qué está pasando?

15 Agosto, 2024, 11:06 am
Respuesta #1

DaniM

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 221
  • País: cz
  • Karma: +0/-0
No entiendo de cosas windowseras, pero así a ojo me parece que lo que te está causando un bucle infinito es lo siguiente:

Código: [Seleccionar]
If InStr(wnd.LocationURL, "http://file:///CARPETA") > 0 Then
        WScript.Quit(0)

ChatGPT te ha timado. No tiene sentido que uses el protocolo HTTP para buscar ficheros localmente; en todo caso la ruta debería ser file:///CARPETA. Así tal y como lo haces esa condición nunca debería cumplirse y por lo tanto nunca llegarías a ejecutar WScript.Quit(0), que es lo que debería terminar el programa de forma limpia, sino WScript.Quit(1), que imagino que está pasando un código de error y, probablemente, interrumpiendo la ejecución del script sin cerrar la carpeta (consulta la documentación del método Quit), por lo que al mantenerla abierta if %errorlevel% equ 0 se cumpliría en cada ciclo y vuelta a empezar.

A partir de aquí, no sé si hay más errores u otras consideraciones a tener en cuenta, pero una sugerencia general es que dividas tu código en pequeñas funciones que puedas testear de forma aislada y comprobar si cada función devuelve lo que tiene que devolver en cada caso que le pases al test, así te será mucho más fácil detectar errores potenciales.

15 Agosto, 2024, 11:40 am
Respuesta #2

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Eso de http no está en el code original, probablemente otro foro (de donde copié cosas) o este lo agregó como "corrección" automatica, al detectar que habia muchos / tal vez...
La carpeta se abre.
Yo lo que más sé de programación es Action Script de Macromedia Flash 5, o sea, de los AS más nuevos tampoco sé tanto. Esto es algo que acabo de probar guiado por GPT, le pregunté todo sobre ese código antes de usarlo, pero la parte lógica no la había visto bien. No sé cual es el equivalente de Print o trace, eso podría ayudar.