Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    2

    [vbscript] Cancellare cartelle che contengano una lettera specifica nel nome

    Ciao a tutti,
    premetto che sono totalmente inesperto di programmazione, e in passato ho fatto solo piccole modifiche a files .vbs già creati da altre persone. In questi giorni mi è stato chiesto di creare da zero uno script vbs che cancelli, da una cartella principale su un server, delle sottocartelle in cui la quarta lettera del loro nome sia "T" (ciò identifica le cartelle dei profili di utenti Training). Ovviamente nella stessa cartella principale sono presenti anche sottocartelle che non rispecchiano questo requisito, perchè create da utenti non Training, e che quindi non devono essere cancellate.
    Potete aiutarmi? Probabilmente per chi mastica vbs questo script è molto semplice... io ho provato a fare dei tentativi con alcune variabili (char, left, Ucase...) ma senza troppa logica e con pessimi risultati.
    Grazie!!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sposto la discussione nel forum "Visual Basic e .NET Framework" dove vengono trattate tutte le versioni di VB (compreso VBS).

    Nel frattempo, dovresti postare ciò che tu hai fatto, per capire dove stai sbagliando e darti, di conseguenza, le giuste dritte. La richiesta di sviluppo (per quanto possa sembrare/essere semplice) non è ammessa, da regolamento.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    2
    Grazie LeleFT!
    Scusa, non avevo letto il regolamento e non ero al corrente di queste norme.

    Copio lo script sul quale sto cercando di lavorare, premetto che non l'ho creato io e che non so cosa voglia dire gran parte di ciò che è stato fatto.
    Io mi sto concentrando sulla Sub delete_profiles, che se ho ben capito dovrebbe cancellare le cartelle che nel loro nome hanno come quarta lettera "T" (anche se non credo che Ucase sia la variabile giusta).
    La funzione check_ou dovrebbe verificare che il nome della cartella sia presente in una specifica OU di Active Directory come utente.

    Grazie ancora!
    Ciao!

    Dim fso, wshshell, wshnet
    Dim script_name_full, script_path
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set wshshell = CreateObject("WScript.Shell")
    Set wshnet = CreateObject("Wscript.Network")
    ' Script path without closing \
    script_name_full = WScript.ScriptFullName
    script_path = fso.GetParentFolderName(script_name_full)
    ' Set variables
    Delete_profiles("\\NOME_SERVER\f$\USERPROFILES\")
    '---------------------------------------------------------------------------------------------
    ' Subs / Functions
    '---------------------------------------------------------------------------------------------
    Sub Delete_Content(s_start_folder, s_folders, s_excl)
    Dim Dir, Dirs
    On Error Resume Next
    Set Dirs = fso.GetFolder(s_start_folder).Subfolders
    For Each Dir In Dirs
    ' Check for exclusion
    excl = False
    For y = 0 To UBound(s_excl)
    If LCase(Dir.name) = LCase(s_excl(y)) Then
    excl = True
    Exit For
    End If
    Next
    If Not excl Then ' Go ahead only with not excluded folders
    ' Check for target folder
    For x = 0 To UBound(s_folders)
    If LCase(Dir.name) = LCase(s_folders(x)) Then
    On error resume Next
    fso.DeleteFolder Dir.path & "\*", True
    fso.DeleteFile Dir.path & "\*", True
    On Error goto 0
    End If
    Next
    ' Restart sub for subfolders
    Delete_Content Dir, s_folders, s_excl
    End If
    Next
    End Sub
    '---------------------------------------------------------------------------------------------
    Sub Delete_profiles(s_start_folder)
    Dim Dir, Dirs
    Set Dirs = fso.GetFolder(s_start_folder).Subfolders
    For Each Dir In Dirs
    If Ucase(Mid(Dir,4,1)) = "T" Then
    fso.DeleteFolder Dir, True
    End If

    Next
    End Sub
    '---------------------------------------------------------------------------------------------
    Function check_ou(s_ou_name)
    Const ADS_SCOPE_SUBTREE = 2
    check_ou = False

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand = CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = "SELECT ADsPath FROM 'LDAP://ou=Users,ou=Resources,ou=XXX,ou=XXXXXXXX,dc=XXXXXX XX,dc=XXX,dc=corp' WHERE objectCategory='organizationalUnit'"
    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst
    Do Until objRecordSet.EOF
    If Instr(Ucase(objRecordSet.Fields("ADsPath").Value), UCase(s_ou_name)) <> 0 Then
    check_ou = true
    Exit Do
    ' Else
    ' check_ou = check_ou & objRecordSet.Fields("ADsPath").Value & VbCrLf
    End If

    objRecordSet.MoveNext
    Loop
    End Function

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.