|
|
|
|
Strumenti |
17-02-2014, 10:34 | #1 |
Member
Iscritto dal: Sep 2010
Messaggi: 160
|
[VBScript] Spostare un file nel cestino
Ciao a tutti,
sto cercando un modo per spostare un file nel cestino tramite VBScript. Con il metodo DeleteFile dell'oggetto FileSystemObject, il file specificato viene elminato definitivamente. Invece c'è un modo per spostarlo nel cestino? È complicato? |
17-02-2014, 11:40 | #2 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Potresti utilizzare questo tool: http://www.maddogsw.com/cmdutils/
|
17-02-2014, 12:01 | #3 |
Member
Iscritto dal: Sep 2010
Messaggi: 160
|
Non c'è un'alternativa che non richieda programmi esterni?
|
17-02-2014, 12:05 | #4 |
Senior Member
Iscritto dal: May 2005
Messaggi: 8685
|
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
17-02-2014, 12:18 | #5 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Quello è il modo corretto, però ha un inconveniente: viene visualizzata la finestra per la conferma della cancellazione.
L'alternativa è di modificare delle chiavi di registro, ma al momento non ricordo quali. |
17-02-2014, 13:16 | #6 |
Member
Iscritto dal: Sep 2010
Messaggi: 160
|
Ho provato con lo script nel primo link, ma non funziona... non appare neanche la finestra di conferma della cancellazione. Com'è possibile?
(Non viene visualizzato nessun errore) |
17-02-2014, 13:25 | #7 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Ops, non mi ero accorto che fossero dei link...
sostituisci quest'istruzione objFolderItem.InvokeVerb("&Delete")con questa: objFolderItem.InvokeVerb("delete") |
17-02-2014, 14:39 | #8 |
Member
Iscritto dal: Sep 2010
Messaggi: 160
|
Funziona! Grazie mille!
|
17-02-2014, 20:48 | #9 |
Member
Iscritto dal: Sep 2010
Messaggi: 160
|
Mmh... c'è un altro piccolo problema.
Nello script che sto cercando di realizzare, ho bisogno di spostare nel cestino tanti file contemporaneamente. Per farlo, ho utilizzato il codice che ha linkato x_Master_x all'interno di una Sub, che ho poi richiamato in un ciclo For, in modo da spostare nel cestino ogni file presente nella cartella. Il problema è che in questo modo i file vengono spostati nel cestino uno ad uno, mettendoci molti secondi per completare l'operazione quando i file sono varie centinaia. Invece, l'ideale sarebbe spostarli tutti contemporaneamente nel cestino... Avete qualche idea? |
18-02-2014, 08:22 | #10 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Puoi iterare sulle istruzioni di cancellazione invece che sull'intero codice.
Se i file si trovano tutti nella stessa cartella basta inserire queste due istruzioni nel ciclo: Codice:
Set objFolderItem = objFolder.ParseName(strFileName(i)) objFolderItem.InvokeVerb("delete") Se hai i percorsi assoluti puoi ricavare i nomi dei file con questa istruzione: strFileName = fso.GetFileName(pathAssoluto(i))in questo caso strFileName è una stringa e pathAssoluto un array. Se invece i file si trovano in cartelle diverse dovrai inserire queste istruzioni nel ciclo: Codice:
strFolderParent = fso.GetParentFolderName(pathAssoluto(i)) strFileName = fso.GetFileName(pathAssoluto(i)) Set objFolder = objShell.Namespace(strFolderParent) Set objFolderItem = objFolder.ParseName(strFileName) objFolderItem.InvokeVerb("delete") |
18-02-2014, 13:36 | #11 |
Member
Iscritto dal: Sep 2010
Messaggi: 160
|
Mmh... a grandi linee ho capito cosa intendi, ma non credo di aver capito bene come impostare il codice.
Allora innanzitutto i file sono tutti nella stessa cartella. Tuttavia, lo script serve a cancellare tutti i file di un solo tipo all'interno di una cartella, quindi non tutti i file contenuti in essa. Per ora la parte di codice in questione è questa: Codice:
Set FolderRecycle = objFSO.GetFolder(FolderPath) For Each File In FolderRecycle.Files If Right(File.name,ExtLen) = Extension Then Toss(FolderPath & "\" & File.name) End If Next - FolderPath è il percorso della cartella in cui ci sono i file - Extension è l'estensione dei file da cancellare - ExtLen è la lunghezza della stringa Extension - Toss è la Sub con argomento "strFileToToss", contente il codice preso dal link di prima. Quindi tu mi stai dicendo di togliere quel ciclo For Each, lasciando soltanto il ciclo l'istruzione If, e inserire un ciclo For..To all'interno della sub Toss? Ma lo devo mettere solo per la definizione di strFileName, o anche per lo spostamento nel cestino? Ultima modifica di Trial4life : 18-02-2014 alle 14:12. |
18-02-2014, 14:07 | #12 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Cosa? Il ciclo i...
Codice:
Const HKEY_CURRENT_USER = &H80000001 Private Sub moveToRecycle(FolderPath, Extension) strComputer = "." Set fso = CreateObject("Scripting.FileSystemObject") Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Explorer" strValueName = "ShellState" Call oReg.GetBinaryValue(HKEY_CURRENT_USER,strKeyPath, strValueName,strValue) strOrigBinSet = strValue(4) strValue(4) = 39 errReturnA = oReg.SetBinaryValue(HKEY_CURRENT_USER, strKeyPath, strValueName, strValue) Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.Namespace(FolderPath) ' Set FolderRecycle = objFSO.GetFolder(FolderPath) For Each File In FolderRecycle.Files If Right(File.name, 4) = "." & Extension Then Set objFolderItem = objFolder.ParseName(File.name) objFolderItem.InvokeVerb("delete") End If Next ' strValue(4) = strOrigBinSet errReturnB = oReg.SetBinaryValue(HKEY_CURRENT_USER, strKeyPath, strValueName, strValue) End Sub |
18-02-2014, 14:08 | #13 |
Member
Iscritto dal: Sep 2010
Messaggi: 160
|
Ops... ahahahah mi sono sbagliato
|
18-02-2014, 14:28 | #14 |
Member
Iscritto dal: Sep 2010
Messaggi: 160
|
Non è cambiato molto... la velocità di spostamento nel cestino è sempre quella (per 300 files ci metterà all'incirca 20 secondi).
Lo script è in grado anche di rimuovere i file senza spostarli nel cestino. Per farlo, ho usato: Codice:
objFSO.DeleteFile(ELIMINA) In questo modo, con l'asterisco, tutti i file dell'estensione Extension vengono rimossi contemporaneamente (senza bisogno di nessun ciclo!), e ci mette davvero un attimo. C'è un modo per usare l'asterisco anche nella Sub di prima? Ultima modifica di Trial4life : 18-02-2014 alle 14:32. |
18-02-2014, 15:45 | #15 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Codice:
Const HKEY_CURRENT_USER = &H80000001 Const SHCONTF_NONFOLDERS = 64 Private Sub moveToRecycle(FolderPath, Extension) strComputer = "." Set fso = CreateObject("Scripting.FileSystemObject") Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Explorer" strValueName = "ShellState" Call oReg.GetBinaryValue(HKEY_CURRENT_USER,strKeyPath, strValueName,strValue) strOrigBinSet = strValue(4) strValue(4) = 39 errReturnA = oReg.SetBinaryValue(HKEY_CURRENT_USER, strKeyPath, strValueName, strValue) Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.Namespace(FolderPath) ' Set objFolderItems = objFolder.Items() Call objFolderItems.Filter(SHCONTF_NONFOLDERS, "*." & Extension) Call objFolderItems.InvokeVerbEx("delete") ' strValue(4) = strOrigBinSet errReturnB = oReg.SetBinaryValue(HKEY_CURRENT_USER, strKeyPath, strValueName, strValue) End Sub |
18-02-2014, 20:50 | #16 |
Member
Iscritto dal: Sep 2010
Messaggi: 160
|
Davvero geniale!
Non so come ringraziarti!!! Funziona tutto alla perfezione |
15-08-2018, 11:18 | #17 |
Junior Member
Iscritto dal: Aug 2018
Messaggi: 1
|
Spostare files nel cestino da unità flash/di rete
Ciao a tutti e buon Ferragosto! Mi chiedevo: esiste uno script che permette di spostare i files che voglio cancellare nel cestino del disco C anziché eliminarli definitivamente??? Sarebbe estremamente utile, dal post che leggo sembra che ci siamo quasi ma non capisco tutte quelle righe di codice dove/come le devo inserire...
|
15-08-2018, 15:18 | #18 |
Senior Member
Iscritto dal: Aug 2017
Messaggi: 469
|
|
15-08-2018, 15:57 | #19 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
07E soprattutto perché sottolinei il cestino del disco c? Stiamo per caso parlando di file su un disco esterno?
Edit: non avevo visto il titolo... Quando mandi un file nel cestino in realtà il file resta dov'è, viene semplicemente nascosto, per questo puoi inviarvi file enormi senza alcuna attesa... Ovviamente ciò non è possibile se il file risiede su un disco esterno perché non c'è garanzia che questo sia ancora collegato qualora decidessi di ripristinare il file. In questo caso il sistema deve effettuare una copia del file da qualche parte, e per farlo occorre eseguire una configurazione sul cestino per il disco in oggetto. Ultima modifica di Daniels118 : 15-08-2018 alle 16:13. |
15-08-2018, 16:27 | #20 | |
Amministratore
Iscritto dal: Jun 2009
Città: Glasgow, Scozia
Messaggi: 1869
|
Quote:
__________________
Riccardo Robecchi - autore per Hardware Upgrade MB ASUS Crosshair VI Hero, CPU Ryzen 7 1700X, RAM 32 GiB Corsair Vengeance 3000MHz, VGA Sapphire AMD Radeon RX 5700 XT Pulse, CASE Sun Ultra 24, PSU Corsair TX650W. KDE neon x64 & Win 10 Pro x64. |
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:36.