|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 329
|
Azione automatica
Ho da fare un lungo e ripetitivo lavoro...inserire molti cd e copiare tutti i file sul cd in una cartella su hd.
Come posso fare in automatico solo cambiando il cd? Ho scoperto la funzione Utilità di Pianificazione ma mi sa che non c'è questa operazione. Al momento l'unica azione automatica che ho ottenuto è quella di aprire i cd per vederne il contenuto. Poi devo selezionare i file e trascinarli nella solita cartella. Sapete se c'è un programma o un'azione automatica per fare questo? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 8697
|
Ti farò una sola parte del VBS, la seconda ( cioè quella relativa alla copia dal DVD alla cartella ) la lascio a te, con un minimo di impegno ci riuscirai da solo
Codice:
' x_Master_x
Dim sDrive
sDrive="E:" ' Cambia con la lettera del tuo lettore DVD
Set fso=WScript.CreateObject("Scripting.FileSystemObject")
If Not fso.DriveExists(sDrive) Then
WScript.echo "Il drive " & sDrive & " non è stato trovato"
WScript.Quit
End If
Do While fso.GetDrive(sDrive).IsReady=0
WScript.Sleep 1000
Loop
WScript.Echo "Il drive " & sDrive & " è pronto per l'uso"
Una volta effettuata la copia, non ti resta altro che espellere il DVD, avviare nuovamente il VBS, inserire il DVD ed aspettare che finisca la copia...così via.
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 329
|
Non so bene di cosa parli ma ci ho provato cercando su Google.
Può essere corretto così? Codice:
Dim sDrive
sDrive="F:"
Set fso=WScript.CreateObject("Scripting.FileSystemObject")
If Not fso.DriveExists(sDrive) Then
WScript.echo "Il drive " & sDrive & " non è stato trovato"
WScript.Quit
End If
Do While fso.GetDrive(sDrive).IsReady=0
WScript.Sleep 1000
Loop
Const OverwriteExisting = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "F:\*.xls" , "E:\archivio\" , OverwriteExisting
WScript.echo "copia F finita"
- devo creare un file di testo con il blocco note e rinominarlo in script.vbs? - inserisco il cd, faccio doppio click sul file script.vbs e parte la copia dopodiché cambio cd e riclicco due volte sul file script.vbs, esatto? - per velocizzare ho recuperato un altro lettore cd/dvd...posso creare un secondo script2.vbs (ovviamente cambiando lettera del lettore) ed eseguirlo in contemporanea? Comunque grazie per la dritta! EDIT: Mi rispondo per alcune domande: - sì funziona - a me funziona così - anche il secondo script funziona in contemporanea Grazie per la lezione! Ultima modifica di Cetto La Qualunque : 07-09-2014 alle 22:03. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 8697
|
Ben fatto, io la copia l'avrei fatta con una barra di progresso:
Codice:
' x_Master_x
sTarget = "C:\Destination"
sOrigin = "C:\Origin"
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(sTarget)
objFolder.CopyHere sOrigin & "\*.*"
WScript.Echo "Copia finita"
A quel punto probabilmente avrei aggiuto una subroutine per evitare di aprire-chiudere il VBS ma questa è un'altra lezione
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 329
|
Quindi sostituire le mie ultime 4 righe con quello che hai fatto tu?
Codice:
Dim sDrive
sDrive="F:"
Set fso=WScript.CreateObject("Scripting.FileSystemObject")
If Not fso.DriveExists(sDrive) Then
WScript.echo "Il drive " & sDrive & " non è stato trovato"
WScript.Quit
End If
Do While fso.GetDrive(sDrive).IsReady=0
WScript.Sleep 1000
Loop
sTarget = "E:\archivio"
sOrigin = "F:"
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(sTarget)
objFolder.CopyHere sOrigin & "\*.xls"
WScript.Echo "Copia finita"
Accetto volentieri suggerimenti pur di semplificare ulteriormente la luuuuuunga operazione. EDIT: Ho trovato questo per aprire il lettore cd: Codice:
CreateObject(“WMPlayer.OCX.7″).cdromCollection.Item(0).eject Codice:
WScript.Echo "Copia finita" EDIT2: No, non va, mi sa che è un po' più complicato...ho trovato questo ma va a cercare tutti i drive: Codice:
Set oWMP = CreateObject("WMPlayer.OCX.7")
Set colCDROMs = oWMP.cdromCollection
if colCDROMs.Count > 0 then
for i=0 to colCDROMs.Count - 1
strDrive= oWMP.cdromCollection.item(i).driveSpecifier
strQuestion = "Espellere drive " & strDrive & "?"
answer= msgbox (strQuestion, vbOKCancel)
if answer= vbOK then
colCDROMs.Item(i).Eject
strQuestion = "Chiudere drive " & strDrive & "?"
answer= msgbox (strQuestion, vbOKCancel)
if answer= vbOK then colCDROMs.Item(i).Eject
end if
next
end if
wscript.quit
Ultima modifica di Cetto La Qualunque : 08-09-2014 alle 17:11. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 8697
|
Esempio di subroutine:
Codice:
' x_Master_x
Call MySub_1
Sub MySub_1()
WScript.Echo "Passaggio 1"
Call MySub_2
End Sub
Sub MySub_2()
WScript.Echo "Passaggio 2"
Call MySub_3
End Sub
Sub MySub_3()
WScript.Echo "Passaggio 3"
Call TheEnd
End Sub
Sub TheEnd()
result = MsgBox ("Operazioni concluse. Ripetere da zero?", vbYesNo, "Attenzione")
Select Case result
Case vbYes
Call MySub_1
Case vbNo
WScript.Quit
End Select
End Sub
Codice:
' x_Master_x
sLetter = "D:" ' Da cambiare con la lettera del lettore
Set oWMP = CreateObject("WMPlayer.OCX.7")
Set colCDROMs = oWMP.cdromCollection
If colCDROMs.Count > 0 then
For i=0 to colCDROMs.Count - 1
sDrive = oWMP.cdromCollection.item(i).driveSpecifier
If sDrive = sLetter Then
colCDROMs.Item(i).Eject
End If
Next
End If
Codice:
' x_Master_x
sLetter = "D:" ' Da cambiare con la lettera del lettore
Set oWMP = CreateObject("WMPlayer.OCX.7")
Set colCDROMs = oWMP.cdromCollection
Set oCD = oWMP.cdromCollection.getByDriveSpecifier(sLetter)
oCD.Eject
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . Ultima modifica di x_Master_x : 09-09-2014 alle 14:13. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 329
|
Sì le ultime 2 funzionano correttamente.
Ora devo provare a comporre i vari passaggi, ossia: 1- copia da F: a E: 2- espelli carrello 3- quando il carrello rientra riparti dal passaggio 1 |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 329
|
Codice:
' x_Master_x
Call MySub_1
Sub MySub_1()
sDrive="F:"
Set fso=WScript.CreateObject("Scripting.FileSystemObject")
If Not fso.DriveExists(sDrive) Then
Call TheEnd
End If
Do While fso.GetDrive(sDrive).IsReady=0
WScript.Sleep 1000
Loop
Const OverwriteExisting = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "F:\*.xls" , "E:\archivio\" , OverwriteExisting
Call MySub_2
End Sub
Sub MySub_2()
Set oWMP = CreateObject("WMPlayer.OCX.7")
sLetter = "F:"
Set colCDROMs = oWMP.cdromCollection
Set oCD = oWMP.cdromCollection.getByDriveSpecifier(sLetter)
oCD.Eject
Call MySub_3
End Sub
Sub MySub_3()
Call TheEnd
End Sub
Sub TheEnd()
result = MsgBox ("Copia F finita. Ripetere da zero?", vbYesNo, "Attenzione")
Select Case result
Case vbYes
Call MySub_1
Case vbNo
WScript.Quit
End Select
End Sub
Ora devo vedere come sostituire il terzo passaggio...come posso fare per fargli capire di ripartire dal passaggio 1 quando il carrello è rientrato? Ultima modifica di Cetto La Qualunque : 08-09-2014 alle 22:07. |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 8697
|
?
Codice:
Sub TheEnd()
Call MySub_1
End Sub
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 329
|
Penso di aver riordinato meglio. Non ho capito bene però la chiusura che mi hai indicato...in teoria non riparte se dico sì e si interrompe tutto se dico no?
Codice:
' x_Master_x
Call 1_Verifica
Sub 1_Verifica()
sDrive="F:"
Set fso=WScript.CreateObject("Scripting.FileSystemObject")
If Not fso.DriveExists(sDrive) Then
Call TheEnd
End If
Call 2_Lettore
End Sub
Sub 2_Lettore()
Do While fso.GetDrive(sDrive).IsReady=0
WScript.Sleep 1000
Loop
Call 3_Copia
End Sub
Sub 3_Copia()
Const OverwriteExisting = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "F:\*.xls" , "E:\archivio\" , OverwriteExisting
Call 4_Espelli
End Sub
Sub 4_Espelli()
Set oWMP = CreateObject("WMPlayer.OCX.7")
sLetter = "F:"
Set colCDROMs = oWMP.cdromCollection
Set oCD = oWMP.cdromCollection.getByDriveSpecifier(sLetter)
oCD.Eject
Call 5_Finale
End Sub
Sub 5_Finale()
result = MsgBox ("Copia F finita. Ripetere da zero?", vbYesNo, "Attenzione")
Select Case result
Case vbYes
Call 1_Verifica
Case vbNo
WScript.Quit
End Select
End Sub
Per la barra di progresso della copia è un casino? Ho provato a cercare ma non ho trovato nulla di chiaro (soprattutto al mio livello |
|
|
|
|
|
#11 | ||
|
Senior Member
Iscritto dal: May 2005
Messaggi: 8697
|
Quote:
Lascia come l'ho scritto in precedenza comunque, era solo un esempio. Quote:
La copi-incolli nella Sub 3_Copia() cambiando i percorsi con i tuoi, è la stessa barra di progresso che usa Windows P.S. C'è un errore: Codice:
If Not fso.DriveExists(sDrive) Then Call TheEnd End If Codice:
If Not fso.DriveExists(sDrive) Then WScript.Echo "Il drive " & sDrive & " non è stato trovato" WScript.Quit End If
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . Ultima modifica di x_Master_x : 09-09-2014 alle 13:12. |
||
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 329
|
Ok, spero di aver capito le correzioni. Grazie ancora per la disponibilità!
Già sto velocizzando di molto il lavoro grazie al tuo aiuto! Codice:
' x_Master_x
Call 1_Verifica
Sub 1_Verifica()
sDrive="F:"
Set fso=WScript.CreateObject("Scripting.FileSystemObject")
If Not fso.DriveExists(sDrive) Then
WScript.Echo "Il drive " & sDrive & " non è stato trovato"
WScript.Quit
End If
Call 2_Lettore
End Sub
Sub 2_Lettore()
Do While fso.GetDrive(sDrive).IsReady=0
WScript.Sleep 1000
Loop
Call 3_Copia
End Sub
Sub 3_Copia()
Const OverwriteExisting = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "F:\*.xls" , "E:\archivio\" , OverwriteExisting
sTarget = "E:\archivio\"
sOrigin = "F:"
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(sTarget)
objFolder.CopyHere sOrigin & "\*.xls"
Call 4_Espelli
End Sub
Sub 4_Espelli()
Set oWMP = CreateObject("WMPlayer.OCX.7")
sLetter = "F:"
Set colCDROMs = oWMP.cdromCollection
Set oCD = oWMP.cdromCollection.getByDriveSpecifier(sLetter)
oCD.Eject
Sub 1_Verifica
End Sub
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 8697
|
Codice:
Sub 3_Copia()
sTarget = "E:\archivio"
sOrigin = "F:"
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(sTarget)
objFolder.CopyHere sOrigin & "\*.xls"
Call 4_Espelli
End Sub
P.S. Ricordati che per come è strutturato 4_Espelli() puoi solo terminarlo dal Task Manager per uscire, altrimenti usa la versione con il MsgBox
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . Ultima modifica di x_Master_x : 09-09-2014 alle 14:15. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:17.




















