Borrar carpeta mediante VBS

Iniciado por marko0s, 25 Marzo 2020, 18:38 PM

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

marko0s

Buenas tardes,

alguin seria tan amable de decirme como borrar con un script *.vbs las carpetas que se me crean en

C:\Users\miUsuario\AppData\Local\Tempzxpsign6031c91fa5e36b0d

se me crean bastantes y quisiera decirle al script que me borre todas que empiecen por Tempz

Estoy usando esto pero no funciona y no veo la forma ya que mis conocimientos son limitados de scripting

Dim strFolderPath, objFso
strFolderPath = "C:\Users\miUsuario\AppData\Local\Temp[b]*[/b]"
Set objFso = CreateObject("Scripting.Filesystemobject")

If objFso.FolderExists(strFolderPath) then
    objFso.DeleteFolder strFolderPath, True
End If

Set objFso = Nothing


creo que el temp* (asterisco) no funciona como tal

gracias y perdonad las molestias

EdePC

Saludos,

objFso.FolderExists("path\to\folder") no soporta comodines, requiere la ruta exacta de la carpeta ya sea URL Absoluta o Relativa.

- Lo más sencillo que veo es utilizar On Error Resume Next para luego verificar si ha habido errores, en este caso el error número 76 corresponde a que no se ha encontrado la ruta o la carpeta no existe, aunque más genérico es mostrar el error en sí.

Código (vb) [Seleccionar]
Dim strFolderPath, strUserLocalAppData, objFso

Set objShell = CreateObject("Wscript.Shell")
Set objFso = CreateObject("Scripting.FileSystemObject")

strUserLocalAppData = objShell.ExpandEnvironmentStrings("%LocalAppData%")
strFolderPath = strUserLocalAppData & "\Tempz*"

On Error Resume Next
Call objFso.DeleteFolder(strFolderPath, True)
If Err Then
  WScript.Echo(Err.Description)
End If
Err.clear



- Si te estás iniciando en VBScript, te podría recomendar este par de libros en español:

Visual Basic Script Tomo I (White Darknes):
https://openlibra.com/es/book/visual-basic-script

Visual Basic Script Tomo II (White Darknes):
https://openlibra.com/es/book/visual-basic-script-parte-2

marko0s

#2
Muchisimas gracias por los aportes. Mil gracias. Me ha servido de muchisima ayuda. Los libros me los voy a leer "pero ya".

Nueva pregunta.

Si esa carpeta no existiera, el script se detendría?

o vale on poner:

 

Dim strFolderPath, strUserLocalAppData, objFso
   
   Set objShell = CreateObject("Wscript.Shell")
   Set objFso = CreateObject("Scripting.FileSystemObject")


   strUserLocalAppData = objShell.ExpandEnvironmentStrings("%LocalAppData%")
   strFolderPath = strUserLocalAppData & "\Tempz*"

   On Error Resume Next
   Call objFso.DeleteFolder(strFolderPath, True)
   If Err Then
 objFso.CreateFolder strFolderPath
 strFolderPath = strUserLocalAppData & "\Tempz01" 'por ejemplo crea una carpeta llamada asi
     WScript.Echo(Err.Description)
   End If
   Err.clear


Gracias

nota: si si sabes de algun buen curso de scripting que pueda comprar, si es gratuito mejor, encantado de leerte.

EdePC

CitarSi esa carpeta no existiera, el script se detendría?

- Nop, para eso está la línea On Error Resume Next, al producirse un error luego de haber declarado esa línea, el script continúa con la siguiente línea sin mostrar ningún error.

-- Luego se utiliza el objeto Err para comprobar si ha habido algún error y tomar las medidas respectivas. Al final usar Err.Clear para restablecer el objeto Err como si no hubiera existido nunca el error capturado.

- Visual Basic Script ya tiene buena edad, hay paginas de documentación muy conocidas en Inglés como https://ss64.com/ o https://www.robvanderwoude.com/, en estas mismas se hace referencia buenos libros también en inglés: https://ss64.com/links/vblinks.html https://www.robvanderwoude.com/books.php

- También podrías descargarte la referencia del lenguaje VBScript 5 desde:
https://raw.githubusercontent.com/pmachapman/VBSE/master/Distribution/script56.chm

- Existe un IDE que quizá te interese, está en inglés y se puede utilizar gratuitamente: https://www.vbsedit.com

marko0s

Buenos dias de nuevo, MIL gracias.

2preguntas nuevas

> %localappdata% llama a la carpeta .appdata, ok

¿Cual es el patch para llamar a la carpeta windows o c:\windows.?

esto es porque estoy intentando borrar lo que hay dentro de la carpeta windows/temp y no me deja


> Otra cosa, para borrar la papeleraa me podrias decir tambien el codigo?


Muchisimas gracias por todo de verdad, y perdona por las molestias

Serapis

#5
Escribe estas 3 línea de código, y obtendrás tanto el environ-string, como su valor, luego toma lo que precises (y guárdalas para sucesivas ocasiones).... Nota sin embargo que pueden editarse

Código (vb) [Seleccionar]

dim k as integer
For k = 1 To 31
   msgbox CStr(k), Environ$(k)
Next




Olvidaba decirte que no uses los números en tu código, la lista puede variar y a cada momento y equipo tener un índice distinto. Ten en cuenta que dichas cadenas se pueden editar/añadir/eliminar desde el 'panel de control'...

marko0s

Gracias, pero no lo entiendo muy bien como usar esto.

marko0s

Como se garía para borrar los arechivos que hay dentro de C:\Windows\Prefetch

    Dim strFolderPath, strUserLocalAppData, objFso
    Set objShell = CreateObject("Wscript.Shell")
    Set objFso = CreateObject("Scripting.FileSystemObject")
    strUserLocalAppData = objShell.ExpandEnvironmentStrings("C:\Windows")
    strFolderPath = strUserLocalAppData & "\Prefetch" 'esto tampoco "\Prefetch\*"
    On Error Resume Next
    Call objFso.DeleteFolder(strFolderPath, True)
    Err.clear


no me funciona, perdona por las molestias

Serapis

#8
Si quieres borrar una carpeta que no está vacía, antes tienes que borrar todos los ficheros que contenga.

Más o menos esto necesitas...

..crear los objetos

con errores continuar
folder = ...selecciona la carpeta de tu interés...
Por cada fichero en folder.Files
  fso.DeleteFile(fichero, true)  ' <--- forzar su borrado (OJO: con precaución).
siguente

si folder.files.count = 0
 fso.deleteFolder
sino
 mensaje "oh, oh.. parece que a carpeta contiene algún fichero que no se ha podido borrar...
fin si