Rinominare cartelle Windows



  • Rinominare cartelle Windows
    di Gigainrete (utente non iscritto) data: 19/09/2016 17:51:29

    ciao a tutti,
    da poco sto programmando in VBA con Excel2010.
    mi sono scritto una serie di macro che importano dei dati e li elaborano da dei files.dat contenuti in folders con stessa struttura.
    il mio problema è l'ordine alfanumerico.Spiego meglio.
    Non volendo cambiare lo script a valle(importazione dati cartella per cartella) vorrei cambiare il nome delle cartelle stesse.
    le mie cartelle sono del tipo:
    Case_1_aggiornamento
    Case_2_aggiornamento
    .
    .
    .
    Case_10_aggiornamento
    e così via.

    Excel si tira dentro i nomi delle cartelle in uno sheet dove mi scrivo i percorsi da aprire per leggere i file .dat e importarli(come una sorta di elenco di percorsi win su un foglio provvisorio che lavora nell'ombra)
    Excel ordina questi indirizzi come Case_1_aggiornamento,Case_10_aggiornamento,Case_2_aggiornamento...etc.
    io vorrei un ordine del tipo numerico:Case_1_aggiornamento,Case_2_aggiornamento,..........,Case_10_aggiornamento.
    Avevo pensato a rinominare le cartelle da 1 a 9 con i valori 01.....09 così che bypasso il problema,ma non riesco a fare uno script.
    Il mio elenco finale sarà Case_01_aggiornamento,Case_02_aggiornamento,..........,Case_10_aggiornamento.
    Avete qualche idea?
    grazie mille

    Gianni





  • di patel data: 19/09/2016 19:35:32

    quindi basta controllare se il numero ha una cifra sola ed aggiungere lo zero ?
    se è così prova questa
     
    Sub RenameAllSubFolder()
        rootFolder = "F:Download" ' <<<<<<<<<<<< da cambiare
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set ROOT_Fol = fso.GetFolder(rootFolder)
        For Each Sub_Fol In ROOT_Fol.subfolders
            Name1 = Sub_Fol.Name
            p1 = InStr(Name1, "_")
            p2 = InStrRev(Name1, "_")
            If p2 - p1 = 2 Then
              Name2 = Left(Name1, p1) & "0" & Right(Name1, Len(Name1) - p2 + 2)
              Stop
              Sub_Fol.Name = Name2
            End If
        Next
        Set Su_Fol = Nothing
        Set ROOT_Fol = Nothing
        Set fso = Nothing
         
    End Sub