Newsgroup: it.comp.os.win.xp
Titolo: Spostare file in batch

Ciao a tutti!
Avrei bisogno di un aiuto sulla creazione di un file .bat:
Ho una cartella che costantemente si riempe di file *.zip così
chiamati:
"yymmdd_codice.zip"
Io vorrei fare un file .bat che verifichi la presenza di questi file e
li smisti in cartelle "yymmdd", prendendo tale nome dal nome del file.
Con il comando Move riesco a spostarli tutti insieme in una data
cartella fissa, quel che non so fare è spostarli in una cartella che
deve variare con il nome del file.
Appunto importante, se le cartelle *non* esistono (cosa comune),
queste devono essere prima create sempre dal file .bat in questione.
Trattandosi di migliaia di file e, dovendo la procedura girare molte
volte al giorno, come posso scrivere il file di batch?
Grazie, Davide.

volte al giorno, come posso scrivere il file di batch?
Pi� che un batch ti servirebbe un .vbs
Con i Visual Basic Script esistono molti metodi per i files .Copy .Rename ecc,
se hai qualche esperienza di Basic � tutto molto semplice.
http://javascript.html.it/guide/lezione/933/gestione-dei-file/
Se hai difficolt� prova a fare un esempio pi� dettagliato di quanto ti serve che
vediamo.
--
ciao
  Stefano

 ha

Qualche conoscenza di basic dovrei ancora averla...
quel che devo fare è questo:
una procedura da me non modificabile
scarica ogni 15-20 min dei file zip
io devo fare una procedura che prende questi zip li scompatta e mette
i file decompressi in una cartella ben definita e non variabile
(percorso fisso)
e fin qui non ho problemi con un file .bat
il problema è che
tutti i file zip vanno poi spostati in un percorso di archivio che
dipende dalla prima parte del nome del file zip (percorso variabile
con il nome del file)
mi posso ritrovare come niente con 1000-50mila file zip, per cui ho
bisogno che questa procedura sia il più efficiente possibile.
Provo a leggere sul link che mi hai dato, se hai qualche consiglio, è
ben accetto.
Grazie.

bisogno che questa procedura sia il pi� efficiente possibile.
Il FSO credo sia abbastanza veloce, dopotutto e' un wrapper delle api di
windows, il batch invece deve passare prima per l'interprete DOS.
--
ciao
  Stefano


Dimenticavo, puoi anche eseguire il tuo zip-unzip da VBS
con zip.exe
http://www.info-zip.org/Zip.html
Esempio di zip:
_____________________
Set oShell = CreateObject("WScript.Shell")
 CurDir = oShell.CurrentDirectory 
 Back = CurDir & "\ARC\BACK0.ZIP"
 Prg = "D:\zip\ZIP -9u " & Back & " *.*"  
 MsgBox prg
  oShell.Run (Prg)
--
ciao
  Stefano

 ha

Con i suggerimenti che mi hai dato, credo di poter scrivere qualcosa!
Il problema, sicuramente banale, è: da dove si parte per avviare lo
script?
Le funzioni che indichi sono simili a quelle che vagamente ricordo di
vba (su excel).
Devo salvarlo con un'estensione particolare e poi per richiamarlo
basta un doppio click come per i batch .bat o sono dei file che vanno
compilati, per cui serve il compilatore?

compilati, per cui serve il compilatore?
Lo salvi con estensione .vbs, e attento che qualche antivirus scarso potrebbe
rompere le scatole.
Non servono compilatori, come ti ho detto il linguaggio � solo interpretato.
--
ciao
  Stefano

Non servono compilatori, come ti ho detto il linguaggio � solo interpretato.
basta  solo fare un doppio click sul file .VBS
--
ciao
  Stefano

 ha

Ho trovato anche qualche esempio di file vbs.
Funzionano come i bat, doppio click e si avviano, esattamente quel che
cercavo!
Grazie per l'aiuto di indirizzamento! Credo di potermela cavare
adesso. :)
Anche perché se ti faccio altre domande, manca poco che lo scrivi
direttamente tu!
Ciao, Davide.

Ciao, Davide.
--
ciao
  Stefano

 Di niente, se hai altri problemi posta lo script che ci diamo un'occhiata.
Non dico sia perfetto, ma posto qui il risultato, in modo che possa
servire ad altri!
########################################################################
Dim objFso, objFolder, objFiles
Dim pathIN_ZIP, pathIN_CSV, pathOUT_ZIP
Dim strYY,strMM,strGG, strPathArch
pathIN_ZIP = "C:\ZIP\ZIP2\"
pathOUT_ZIP = "D:\ArchivioCG\"
set wshShell = CreateObject("WScript.Shell")
prog = "C:\zip\ImportaCC.bat"
wshShell.run prog, 7, true
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFso.GetFolder(pathIN_ZIP)
Set objFiles = objFolder.Files
For Each strFile In objFiles
	strPathArch="A" & Left(strFile.Name, 2) & "\"
 		If Not objFso.FolderExists(pathOUT_ZIP & strPathArch) Then
   			Set f = objFso.CreateFolder(pathOUT_ZIP & strPathArch)
 		End If
	strPathArch=strPathArch & "M" & Right(Left(strFile.Name, 4),2) & "\"
 	If Not objFso.FolderExists(pathOUT_ZIP & strPathArch) Then
   		Set f = objFso.CreateFolder(pathOUT_ZIP & strPathArch)
 	End If
	if Right(Left(strFile.Name, 5),1)="G" then
		strPathArch=strPathArch & "G" & Right(Left(strFile.Name, 7),2) & "\"
 		If Not objFso.FolderExists(pathOUT_ZIP & strPathArch) Then
   			Set f = objFso.CreateFolder(pathOUT_ZIP & strPathArch)
 		End If
	End if
	If objFso.FileExists(pathOUT_ZIP & strPathArch) Then
   		objFso.DeleteFile pathOUT_ZIP & strPathArch
	else
		objFso.MoveFile strFile, pathOUT_ZIP & strPathArch
	End If
next
Set objFso = Nothing
Set objFolder = Nothing
Set objFiles = Nothing
########################################################
La parte di unzip e spostamento dei file in blocco è ancora fatta con
un file bat, semplicemente perché era già bella e pronta... e non ho
ben capito se convenga passarlo su vbs!
Se posso ancora chiedere una cosa, se mai volessi fare in modo che
questo script fosse eseguito a cadenza regolare, tipo ogni 30 minuti
24h/24, come si può fare su XP?

24h/24, come si pu� fare su XP?
Io lo metterei nelle operazioni pianificate.
[e grazie per avere condiviso il tuo lavoro]
-- 
Ciao, Alessio - 
http://www.sleepers.it
Materiale in italiano per Agent: 
http://agentit.altervista.org/
FAQ di ICS.newsreader: 
http://faq.news.nic.it/wiki/IcsnFaq

24h/24, come si pu� fare su XP?
Con operazioni p�ianificate come ti hanno gi� dertto o avviando il VBS in
esecuzione automatica mettendo un loop in sleep
Ad esempio fai un loop con con     WScript.Sleep(5000)
 il programma dorme per 5 secondi, poi con le funzioni di Timer, che dice il
numero di secondi e millisecondi da mezzanotte o con Time che ti d� l'orologio
decidi quando fare l'operazione
http://www.w3schools.com/VBscript/vbscript_ref_functions.asp
--
ciao
  Stefano

 ha
scritto:
oppure pi� semplicemente con     WScript.Sleep(60000)
e poi decrementi un contatore dei minuti, quando arriva a zero ricarichi il
counter e fai il lavoro.
Un VBS in background in sleep consuma pochissime risorse
--
ciao
  Stefano

 wrote:
Grazie, adesso faccio delle prove!
Ora è attivo su Operazioni pianificate (Microsoft ha un modo tutto suo
per non fare capire che la pianificazione si può fare anche più volte
al giorno...).
Avevo scartato l''idea del vbs in background perché se per qualche
motivo si blocca lo script, al giro successivo dovrebbe esserci
qualcuno che manualmente lo riavvia, invece con Operazioni pianificate
sarei sicuro che se per qualche motivo si bloccasse al primo giro, il
successivo sarebbe richiamato sempre da Windows.
Ciao :)

successivo sarebbe richiamato sempre da Windows.
Non c'� ragione che uno script si blocchi, ma al limite puoi fare eseguire lo
script che hai fatto da uno che contiene solo il loop con lo Sleep e il timer in
decremento, in modo che l'altro scipt termini ogni volta che viene chiamato.
Dal momento che l'API Sleep supporta un Long, potresti anche fare semplicemente
uno Sleep da 30 minuti
	  WScript.Sleep(30*60*1000)
--
ciao
  Stefano


http://www.autoitscript.com/site/
Conosco Autoit e l'ho anche usato diverse volte, ma consigliandolo nel caso in
questione avrei inutilmente incasinato le cose, dopotutto per spostare e
rinominare qualche file basta un VBS interpretato.
--
ciao
  Stefano