in excel ?
o in vb.net (facile, facilissimo...) ?
e su che s.o. ?
Qui .net non c'entra nulla...
Inutile complicare le cose, no?
E neppure il s.o.
Siamo in Windows
e questo basta.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/officeit/threads
S�.
Se sono tutti nella stessa cartella
(qui c:\tuaCartella), puoi farlo con
un semplice file .vbs.
Apri il Notepad.
Copia/incolla questo:
'dichiaro le variabili
Dim objFSO
Dim objFolder
Dim objFile
Dim sPath
'la path di tuaCartella
sPath = "C:\tuaCartella\"
'creo gli oggetti
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(sPath)
'ciclo i files della directory
For Each objFile In objFolder.Files
With objFile
'elimino i primi 4 caratteri
objFile.Move (sPath & Mid(objFile.Name, 5, Len(objFile.Name)))
End With
Next
'Set a Nothing delle variabili oggetto
Set objFile = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
Adesso:
File-->Salva con nome
Salva come: Tutti i file
Nome file: abc.vbs
(possibilmente salva sul Desktop
per comodit�).
Salva
Doppio click sul file.
Fatto.
Note.
Modifica la path della cartella ed il
suo nome con i tuoi(occhio che alla
fine c'� un \).
Questa modifica il nome di *tutti*
i files presenti nella cartella.
Volendo possiamo puntare solo
a particolari estensioni.
ciao Mauro,
credo che convenga anche controllare se il nuovo nome esiste già ...
onde evitare che finisca in errore non gestito
saluti
r
> Qui .net non c'entra nulla...
> Inutile complicare le cose, no?
> E neppure il s.o.
> Siamo in Windows
> e questo basta.
d'accordo.
ma siamo anche in excel, e non credo che la domanda c'entri nulla con
excel....o sì ?
mi sembra più una domanda di programmazione, che esula da excel o da
office in generale, ma forse mi sbaglio io...
per quello ho chiesto cosa volesse esattamente, e quali fossero le
"condizioni al contorno".
visto che in questo periodo sto provando a programmare in vb.net, ho
solo scritto che in vb.net quanto chiesto è facilissimo...tutto qua.
;-)
Ti consiglio Bulk Rename Utility
MAO
--
MAO web...@occupato.it (liberami x scrivermi)
Nuovo aritcolo, corri a leggerlo - classifica automatica http://www.riolab.org/index.php?view=article&id=207
"i troni sono stati creati per innalzare gli idioti" (KINA)
--
Direi che ti sbagli.
Excel ha il suo strumento per
*programmare*: VisualBasic for Applications
ed il suo VisualBasic.
Posso tranquillamente utilizzare la sintassi
dello script anche nel vb di Excel.
Premi ALT+F11 e forse scopri un nuovo mondo...;-)
Possiamo ricorrere a vbscript se non vogliamo
utilizzare il vb di Excel(e qui mi sembra un caso
tipo).
Addirittura scrivere un programma in .net...
L'OP deve avere come minimo VisualStudio
Express o equivalente e ulteriori conoscenze.
Se segui il gruppo, puoi riscontrare
che un buon 50/60% delle domande riguarda
proprio la *programmazione* di Excel con
gli strumenti che ti ho indicato.
E comunque, si dovrebbe chiamare:
automatizzazione. La programmazione,
almeno per me, � altra cosa.
Che poi sia facilissimo farlo in .net
possiamo anche essere d'accordo, ma prima
definiamo in quale contesto...;-)
Lo so, sono noioso.
Grazie per l'attenzione.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/excelit/threads
Io sto all'oggetto...;-)
Scherzi a parte, se � solo per l'errore:
'dichiaro le variabili
Dim objFSO
Dim objFolder
Dim objFile
Dim sPath
'la path di tuaCartella
sPath = "C:\tuaCartella\"
'creo gli oggetti
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(sPath)
'ciclo i files della directory
For Each objFile In objFolder.Files
With objFile
'gestisco l'errore
On Error Resume Next
'elimino i primi 4 caratteri
If Len(sPath & Mid(.Name, 5, Len(.Name))) > 7 Then
.Move (sPath & Mid(.Name, 5, Len(.Name)))
End if
End With
Next
'Set a Nothing delle variabili oggetto
Set objFile = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/excelit/threads
Gianluigi
> Direi che ti sbagli.
> Excel ha il suo strumento per
> *programmare*: VisualBasic for Applications
> ed il suo VisualBasic.
> Posso tranquillamente utilizzare la sintassi
> dello script anche nel vb di Excel.
> Premi ALT+F11 e forse scopri un nuovo mondo...;-)
togli il "forse" :-D
ma comunque è una schermata di VB, che nativamente è un linguaggio di
"programmazione"....
> Se segui il gruppo, puoi riscontrare
> che un buon 50/60% delle domande riguarda
> proprio la *programmazione* di Excel con
> gli strumenti che ti ho indicato.
seguo da troppo poco questo ng... sicuramente ci farò caso ;-)
> Lo so, sono noioso.
no no affatto...anzi è molto utile un parere di chi è più esperto,
sempre !
> Grazie per l'attenzione.
grazie a te per la spiegazione
ma il concetto che io volevo esprimere è:
per una domanda del genere, (rinominare dei file in una cartella), io
(e sottolineo IO) avrei prima chiesto su qualche ng di software
gratuito, poi su qualcuno di programmazione...
ma MAI (per ignoranza mia a questo punto, lo ammetto) avrei chiesto su
un ng di excel :-)
Il vba di Excel che utilizza la sintassi vb,
non ti consente di creare un programma.
Il programma � Excel. Ti consente di automatizzare
il file(o pi� files) a vari livelli. Inoltre, il
codice non � compilato. Questo vuol dire che
non funziona se non in Excel e che il codice
viene eseguito *di volta in volta*. Quando
chiamato il motore del vba legge il
codice, lo esegue, libera la memoria.
Non c'� persistenza(vero in parte).
Poi s�, senza fare i piedi al serpente,
hai ragione anche tu...;-)
ma il concetto che io volevo esprimere �:
per una domanda del genere, (rinominare dei file in una cartella), io
(e sottolineo IO) avrei prima chiesto su qualche ng di software
gratuito, poi su qualcuno di programmazione...
ma MAI (per ignoranza mia a questo punto, lo ammetto) avrei chiesto su
un ng di excel :-)
*******************************
Dipende anche in questo caso dal contesto
e dalle conoscenze che si hanno.
Ci sono pi� sistemi per fare la stessa cosa.
Excel, Word, altri programmi hanno i
loro strumenti per automatizzare
qualcosa.
Vbscript consente di lavorare con il filesystem
di Windows.
Ecc.
E convengo che esistano gi�
programmi che rinominano i files.
Ma potrei aver bisogno di fare questa cosa
da Excel, avendo i nomi vecchi e nuovi
su due colonne. A voglia linkare un
programma esterno! Pohe righe di
codice e lo faccio da Excel.
Benvenuto in questo mondo e grazie
ancora per l'attenzione.
scusa Mauro ... quello qui sopra è un orrore ... sarà stata la fretta!
se vuoi gestire con on error resume next l'if è solo di troppo ...
se vuoi gestire veramente la possibilità di cadere in errore l'fso
offre tutti i mezzi:
'dichiaro le variabili
Dim objFSO
Dim objFolder
Dim objFile
Dim sPath
Dim sNewFullPath
'la path di tuaCartella
sPath = "D:\Documents and Settings\mensar\Desktop
\Ferraro_convenzioni"
'creo gli oggetti
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(sPath)
'ciclo i files della directory
For Each objFile In objFolder.Files
With objFile
'elimino i primi 4 caratteri
sNewFullPath = objFSO.BuildPath(sPath, _
VBA.Strings.Right(objFile.Name, Len(objFile.Name) -
4))
If objFSO.GetExtensionName(objFile) = _
objFSO.GetExtensionName(sNewFullPath) Then
If objFSO.FileExists(sNewFullPath) Then
Debug.Print "Error: " & objFile.Name & vbNewLine &
_
"Impossibile rinominare il file - file già
esistente"
Else
objFile.Move (sNewFullPath)
End If
Else
Debug.Print "Error: " & objFile.Name & vbNewLine & _
"Impossibile rinominare il file - nome troppo corto"
End If
End With
Next
'Set a Nothing delle variabili oggetto
Set objFile = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
saluti
r
Bene..;-)
Non ho tempo, ma:
VBA.Strings: errore(in .vbs)
Ci sono files con 4 o pi� caratteri di estensione:
Database.accdb
Excel.xlsx
ecc.
"Gianluigi" <fenn...@yahoo.it> ha scritto nel messaggio
news:u6u7h$MfKHA...@TK2MSFTNGP05.phx.gbl...
si hai ragione per VBA.Strings ... stavo testando in vb ...
right è sufficiente ...
per il resto è gestito con la verifica dell'estensione
saluti
r
...mentre debug.print.... ;-)
ciao Mauro,
sinceramente è proprio l'idea dello script che è un po' azzardata
per una operazione così delicata ... adesso ... lasciando stare le
cagatine
è vero che bisognerebbe conoscere meglio le effettive esigenze ma
un programma ad hoc sarebbe decisamente preferibile
comunque ... riflettendoci ... e visto che mi sono imbarcato ... se
proprio volessi usare
uno script farei una simulazione prima di eseguire un'operazione che
1) è irreversibile
2) potrebbe non essere nemmeno efficace (se mi aspettassi che
l'operazione
venga eseguita su tutti i file e invece poi viene eseguita solo su
alcuni)
io ho lasciato la decisione a chi lancia lo script ... anche se uno
script
non dovrebbe mai essere scritto per chiedere ...
questo il codice:
'codice per test
'per eseguire l'operazione
'decommentare a fine codice la riga
'-----------> objFile.Move (sNewFullPath)
'dichiaro le variabili
Dim objFSO
Dim objFolder
Dim objFile
Dim sPath
Dim sNewFullPath
Dim Dic, DicErr
Dim c, b, s
'la path
sPath = "C:\Test"
b = False
c = 0
'creo gli oggetti
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(sPath)
Set Dic = CreateObject("Scripting.Dictionary")
Set DicErr = CreateObject("Scripting.Dictionary")
'ciclo i files della directory
For Each objFile In objFolder.Files
With objFile
'il nuovo nome
sNewFullPath = objFSO.BuildPath(sPath, _
Right(objFile.Name, Len(objFile.Name) - 4))
'controllo che l'estensione prima e dopo
'l'accorciamento del nome rimanga invariata
If objFSO.GetExtensionName(objFile) = _
objFSO.GetExtensionName(sNewFullPath) Then
'controllo se il nuovo file esiste già
'nella cartella
If objFSO.FileExists(sNewFullPath) Then
'se esiste sarà un errore
If DicErr.Exists(objFile.Name) Then
c = c + 1
Else
DicErr.Add objFile.Name, objFile.Name
End If
Else
'se non esiste verrà scritto ...
'controllo se durante la riscrittura
'verrà generato un errore
'dovuto a file già esistente
If Dic.Exists(sNewFullPath) Then
'nel caso lo aggiungo agli errori
If DicErr.Exists(objFile.Name) Then
c = c + 1
Else
DicErr.Add objFile.Name, objFile.Name
End If
Else
'simulo la riscrittura
Dic.Add sNewFullPath, objFile.Name
End If
End If
Else
'l'estensione è cambiata
'aggiungo l'errore
If DicErr.Exists(objFile.Name) Then
c = c + 1
Else
DicErr.Add objFile.Name, objFile.Name
End If
End If
End With
Next
If DicErr.Count + c > 0 Then
s = _
"I seguenti file non possono essere accorciati:" & _
vbNewLine & Join(DicErr.Keys, vbNewLine) & _
vbNewLine & _
"Totale errori: " & DicErr.Count + c & _
vbNewLine & _
"Eseguire comunque l'operazione sugli altri File?"
If MsgBox(s, vbYesNoCancel, "Elenco errori") = vbYes Then
b = True
End If
Else
b = True
End If
If b Then
'eventualmente per scrivere un report
'Dim v
's = ""
'For Each v In Dic.Keys
' s = s & Dic.Item(v) & " -> " & v & vbNewLine
'Next
For Each objFile In objFolder.Files
With objFile
sNewFullPath = objFSO.BuildPath(sPath, _
Right(objFile.Name, Len(objFile.Name) - 4))
If objFSO.GetExtensionName(objFile) = _
objFSO.GetExtensionName(sNewFullPath) Then
If objFSO.FileExists(sNewFullPath) = False Then
'decommentare la riga sotto
'per eseguire l'operazione
'objFile.Move (sNewFullPath)
End If
End If
End With
Next
End If
saluti
r
Gli scripts servirebbero proprio a
questo. A fare le cose semplici.
E questa *�*
una cosa semplice, semplicissima.
Se devi modificare qualcosa in
ActiveDirectory(e qui possiamo
mandare a brave signorine tutta una
rete), cosa utilizzi, cosa utilizzano
i sistemisti? Script.
Avviare Excel e scrivere codice per utilizzare
poi uno script... mah.
Capisco se la cosa la faccio n volte al
giorno, ma se � una volta per tutte,
un bello script e via(via nel cestino una volta
che l'ho utilizzato). L'unica precauzione,
faccio una copia della cartella con i files
a cui modificare i nomi, vedi mai,
ma mi sembra *comunque* una precauzione
da prendere sempre.
Poi noi siamo molto bravi(io per primo)
a complicare le cose.
La parte del sito Microsoft destinata
a tutti i linguaggi script � adesso *importante*.
Sfogliando qua e la ho trovato:
http://gallery.technet.microsoft.com/ScriptCenter/en-us/78490295-16ee-401d-ab00-2a93eb4bef7e
Trovato non vuol dire che ho provato.
Opinioni personali, come sempre.
E so che a parlare di script con te,
sfondo la classica porta aperta.
Buona giornata Robby.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
visuale:
http://punto-informatico.it/s_1119833/Download/News/bulk-rename-utility.aspx
oppure da linea di comando:
http://punto-informatico.it/s_2482341/Download/News/bulk-rename-command-brc.aspx
oppure il buon vecchio Lupas Rename:
http://punto-informatico.it/s_1118774/Download/News/lupas-rename.aspx
in effetti se non si conoscono altre utilities ma si conosce bene excel,
alcuni compiono le operazioni di rinomina pi� complesse anche usando excel
ad esempio con un
DIR /b >file.txt
poi lo importi e fai le tue operazioni fino ad ottenere varie istruzioni di
rinomina in "dos".
Per� ci sono tante utilities ottime che sicuramente sopperiscono alla
mancanza del sistema operativo e non ti fanno fare mille passaggi con excel.
per� non � una strada impercorribile: l'ho visto fare e l'ho persino fatto
:-)
percarità ... qualsiasi editor vb è adatto
anzi coi riferimenti è anche tutto più semplice ...
quindi per me vba di excel andrebbe comunque
meglio del blocco note :-)
> L'unica precauzione,
> faccio una copia della cartella con i files
> a cui modificare i nomi, vedi mai,
> ma mi sembra *comunque* una precauzione
> da prendere sempre.
ovviamente concordo ...
> Poi noi siamo molto bravi(io per primo)
> a complicare le cose.
:-) si effettivamente ...
ma il bello è anche questo ...
>
> La parte del sito Microsoft destinata
> a tutti i linguaggi script adesso *importante*.
> Sfogliando qua e la ho trovato:http://gallery.technet.microsoft.com/ScriptCenter/en-us/78490295-16ee...
non mi sembra un gran chè
>
> Trovato non vuol dire che ho provato.
>
> Opinioni personali, come sempre.
> E so che a parlare di script con te,
> sfondo la classica porta aperta.
>
> Buona giornata Robby.
altrettanto
saluti
r
>
> --
> ---------------------------
> Mauro Gamberinihttp://www.riolab.org/http://www.maurogsc.eu/http://social.microsoft.com/Forums/it-IT/officeit/threads
Puoi sempre postare i tuoi.
Sono ottimi e alzerebbero il livello.
ci stai provando ancora ... mi vuoi mandare via eh :-)
saluti
r