Newsgroup: it.comp.appl.access
Titolo: Rinominare tutti i file di una cartella

Buongiorno a tutti, potreste indicarmi un metodo per eliminare dal nome del file tutto ciò che si trova alla fine prima dell'estensione racchiuso tra patentesi? Esempio "nomefile (xxxxx).ext" devo eliminare quello che c'è in parentesi, parentesi comprese.
 
Grazie
 
Alfio


...dimenticavo... il tutto deve avvenire al click del pulsante "Rinomina".

 
ma c'è qualcosa che non va nella mia richiesta d'aiuto? se si, indicatemi cosa, per favore...
 
Alfio
 

 ...dimenticavo... il tutto deve avvenire al click del pulsante "Rinomina".
 
Ciao Alfio.
 
Un modo:
 
Private Sub cmdRinomina_Click()
On Error GoTo ErrH
Dim strPath   As String
Dim strFile   As String
Dim strNew    As String
 
    strPath = "D:\Percorso\RenTest\"
    strFile = "* (*).*"
    If MsgBox("Si stanno per rinominare tutti i file" _
            & vbNewLine & "corrispondenti alla maschera:" _
            & vbNewLine & "'" & strPath & strFile & "'" _
            & vbNewLine & vbNewLine & "Confermi?" _
            , vbOKCancel Or vbQuestion _
            , "Rinomina" _
            ) <> vbOK Then Exit Sub
 
    strFile = Dir(strPath & strFile)
    Do While Len(strFile)
      strNew = Trim$(Left$(strFile, InStr(1, strFile, "(") - 1)) _
             & Trim$(Mid$(strFile, InStr(1, strFile, ")") + 1))
      Debug.Print strFile, strNew
      Name strPath & strFile As strPath & strNew
      strFile = Dir
    Loop
    MsgBox "Fatto!", vbOKOnly Or vbInformation, "Rinomina"
 
ExtP:
    Exit Sub
 
ErrH:
    If Err = 58 Then
      MsgBox "File: '" & strFile & "' > '" & strNew & "'." _
           & vbNewLine & Err.Description _
           , vbOKOnly Or vbExclamation _
           , "ATTENZIONE!"
      Resume Next
    Else
      MsgBox "File: '" & strFile & "'." _
           & vbNewLine & Err.Description _
           , vbOKOnly Or vbCritical _
           , "ERR#" & CStr(Err.Number)
      Resume ExtP
    End If
 
End Sub
-- 
Ciao!
Maurizio

> Maurizio
 
Grazie Maurizio per l'interessamento,
purtroppo non va, non dà nessuno errore ma quando dice "Fatto" in verità non ha fatto nulla..., probabilmente perché non avrò spiegato bene la composizione del file da rinominare, te ne mostro uno:
 
0246 -- 000 (292) (Copia).png
 
c'è sempre un codice iniziale, non ha una lunghezza fissa;
seguono i due trattini " -- " con spazio prima e spazio dopo;
un altro codice, racchiuso tra parentesi;
infine il copia racchiuso tra parentesi ed è quello che dovrei eliminare ogni volta da tutti i file, l'estensione può essere di qualsiasi formato grafico...
 
Ciao
 
Alfio
 


Peggio per te. :-P
Se un esempio non e' esemplare che esempio e'?
Ti ricordo che il tuo esempio, in base al quale ho scritto la routine, era:
"nomefile (xxxxx).ext"
Ora viene fuori che invece è:
"0246 -- 000 (292) (Copia).png"
Ma la mia routine ti va bene lo stesso. Basta adattarla alla tua realta'. Se non sai come fare domanda, pero' domanda dopo averla studiata almeno un po' e sperimentata con file i cui nomi siano del tipo "nomefile (xxxxx).ext". Vedrai 
che ci riesci.


se hanno tutti lo stesso "testo" e la parte variabile da numerare (come 
una cartella di foto: foto_1.jpg foto_2.jpg ecc.) lo puoi fare anche 
solo con esplora risorse in automatico (selezioni tutti i file da 
rinominare, metti il puntatore sul primo della serie, pulsante destro 
del mouse, rinomina e scrivi il testo). Se i testi sono diversi nei vari 
file non so. Io arrivo fin qui...
 
-- 
mauro

 mauro
 
Ciao Mauro, hai ragione, ma per per me "nomefile (xxxxx).ext" era comprensivo anche delle seconde parentesi... dando per scontato che chi avrebbe dovuto aiutarmi lo sapesse.... Scusami
 
Detto ciò ho sistemato la maschera di ricerca ed ho ottenuto quasi quello che volevo perchè mi ha si rinominato i file ma, purtroppo, eliminandomi dal nome del file il primo gruppo di parentesi che invece deve assolutamente restare e non il secondo. Però non riesco in nessuno modo a modificare la maschera in tal senso...non riesco ad arrivare al secondo gruppo.
 
Ciao
 
Alfio

 Detto ciò ho sistemato la maschera di ricerca ed ho ottenuto quasi quello che volevo perchè mi ha si rinominato i file ma, purtroppo, eliminandomi dal nome del file il primo gruppo di parentesi che invece deve assolutamente restare e non il secondo. Però non riesco in nessuno modo a modificare la maschera in tal senso...non riesco ad arrivare al secondo gruppo.
 
Ciao Alfio.
 
Prova cosi':
 
Public Sub RenTest()
On Error GoTo ErrH
Dim strPath   As String
Dim strFile   As String
Dim strNew    As String
Dim intPos    As String
 
    strPath = "D:\Percorso\RenTest\"
    'strFile = "* (*).*"
    strFile = "*(*)*(*)*.*"
    strFile = Dir(strPath & strFile)
    Do While Len(strFile)
      'strNew = Trim$(Left$(strFile, InStr(1, strFile, "(") - 1)) _
             & Trim$(Mid$(strFile, InStr(1, strFile, ")") + 1))
      intPos = InStr(1, strFile, "(") + 1
      strNew = Trim$(Left$(strFile, InStr(intPos, strFile, "(") - 1))
      intPos = InStr(1, strFile, ")") + 1
      strNew = strNew _
             & Trim$(Mid$(strFile, InStr(intPos, strFile, ")") + 1))
      Debug.Print strFile; " > "; strNew
      Name strPath & strFile As strPath & strNew
      strFile = Dir
    Loop
 


 Prova cosi':
[...]
 
Oppure:
 
Option Compare Database
Option Explicit
 
Public Sub RenTest()
On Error GoTo ErrH
Dim strPath   As String
Dim strFile   As String
Dim strNew    As String
 
    strPath = "D:\Percorso\RenTest\" ' <--- MODIFICARE!
    strFile = "*(*)*(*)*.*"
    strFile = Dir(strPath & strFile)
    Do While Len(strFile)
      strNew = Trim$(Left$(strFile, InStrRev(strFile, "(") - 1)) _
             & Trim$(Mid$(strFile, InStrRev(strFile, ")") + 1))


Ciao Maurizio, finalmente grazie al tuo aiuto ho risolto, Grazie davvero.
 
Avrei ancora bisogno del tuo aiuto se puoi ed é sempre sul rinominare file.
Espongo il problema: devo modificare i nomi di migliaia di file (immagini di articoli). Il nome di questi file é il loro codice articolo che corrisponde al codice articolo inserito nella tabella TArticoli (codarticolo). Devono essere rinominati secondo questa maschera: codice articolo -- (000) (idarticolo).ext
Ovviamente l'id articolo é quello della tabella TArticoli e " -- (000)" é fissa.
 
Ringrazio sin d'ora te e tutti quelli che potranno suggerirmi la soluzione. 
 
Alfio

 Ovviamente l'id articolo é quello della tabella TArticoli e " -- (000)" é fissa.
[...]
 
Ciao Alfio.
 
Vediamo se ho capito.
 
Hai una tabella 'TArticoli' con i seguenti campi:
idarticolo (Duplicati non ammessi)
codarticolo (Duplicati non ammessi)
 
In un certo percorso hai dei file col seguente nome:
codarticolo.ext
(E non esistono file con lo stesso nome e diversa estensione. Ma quei file non hanno tutti la stessa estensione? Per esempio tutti .jpg. O tutti .bmp. Ecc.)
 
Vuoi rinominarli in:
codarticolo<spazio>--<spazio>(000)<spazio>(idarticolo).ext
 
Ho capito giusto?
 
-- 
Ciao!
Maurizio

 
 
Perfetto!! 
 
Alfio

 Perfetto!! 
 
Ciao Alfio,
allora potresti fare cosi':
 
Option Compare Database
Option Explicit
 
Public Sub Test()
Const cstrPath = "D:\Archivi\Forums\icaa\Rinominare file\"
Const cstrExt = ".jpg"
Const cstrOldMask = "%cd%" & cstrExt
Const cstrNewMask = "%cd% -- (000) (%id%)" & cstrExt
Const cstrTblName = "TArticoli"
Const cstrIdName = "idarticolo"
Const cstrCdName = "codarticolo"
 
Dim db              As DAO.Database
Dim rs              As DAO.Recordset
Dim fdId            As DAO.Field
Dim fdCd            As DAO.Field
Dim sql             As String
Dim strOldPathName  As String
Dim strNewPathName  As String
 
    sql = "SELECT" _
        & " T." & cstrIdName _
        & ",T." & cstrCdName _
        & " FROM " & cstrTblName & " AS T" _
        & ";"
    Set db = Application.CurrentDb
    Set rs = db.OpenRecordset(sql, dbOpenForwardOnly, dbReadOnly)
    With rs
      If .BOF And .EOF Then
        ' NO RECS!
      Else
        Set fdId = .Fields(cstrIdName)
        Set fdCd = .Fields(cstrCdName)
        Do Until .EOF
          strOldPathName = cstrPath _
                         & Replace(cstrOldMask, "%cd%", fdCd.Value)
          strNewPathName = cstrPath _
                         & cstrNewMask
          strNewPathName = Replace(strNewPathName, "%cd%", fdCd.Value)
          strNewPathName = Replace(strNewPathName, "%id%", CStr(fdId.Value))
          Debug.Print strOldPathName
          Debug.Print strNewPathName
          Debug.Print
          If Len(Dir(strOldPathName)) Then
            Name strOldPathName As strNewPathName
          Else
            Debug.Print "IL FILE NON ESISTE!"
          End If
          .MoveNext
        Loop
      End If
    End With
 
    On Error Resume Next
    rs.Close
    Set fdCd = Nothing
    Set fdId = Nothing
    Set rs = Nothing
    Set db = Nothing


Il giorno lunedì 23 febbraio 2015 08:09:18 UTC+1, Alfio ha scritto:

Non funge...
Non dà nemmeno errori
Ho messo uno stop dopo la valorizzazione della variabile sql per controllare le variabili, tutte valorizzate tranne sql che resta vuota.
 
Alfio


Scusa, ho scritto una sciocchezza.
Comunque non va, sto controllando le variabili.

Maurizio sei un grande!!!
 
Posso non aggiungere altro?
Ha funzionato tutto al primo colpo (non so cosa gli era preso all'inizio).
F A N T A S T I C O
 
Grazie 1.000.000.000
 
Alfio


Ciao Alfio.
 
Son contento. Grazie per il dovizioso riscontro.
 
-- 
Ciao!
Maurizio

> Son contento. Grazie per il dovizioso riscontro.
 
 
Ciao Maurizio, oggi son tornato ad utilizzare la routine..che dire, non finirò mai di ringraziarti, circa 16.000 immagini rinominate e pronte ad essere usate, che sballo!!!
 
Grazie ancora.
 
Alfio
 
PS: di dove sei?

 Grazie ancora.
 
Ciao Alfio,
grazie, mi fa molto piacere. :)
Alla prossima.
 
-- 
Ciao! :)
Maurizio