|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
![]() |
#1 |
Newbie
Registrato: 11-06-2002
Messaggi: 11
![]() |
batch copia file da a....
da \\myserver\mydir\miofile.txt a c:\miadir\miofile_06022017.txt Dove la data nel file destinazione (06022017) è la data dell'ultima modifica del file sorgente grazie per l'aiuto. Bentrovati! |
![]() |
![]() |
![]() |
#2 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
Rif: batch copia file da a....
Dalla shell di windows, copia ed incolla, poi premi invio.
Che risultato ti da ? Codice:
for /f %a in ('"dir \windows\*.ini /TW|findstr "^^[0-9]""') do @echo %a
___________________________________
Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice |
![]() |
![]() |
![]() |
#3 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
Rif: batch copia file da a....
Il risultato potrebbe essere una cosa del genere:
06/04/2011 03/02/2017 18/10/2016 09/02/2017 02/09/2004 02/09/2004 05/03/2007 13/09/2016 11/08/2008 Cosa è successo ? Succede che appare a video una lista di date che equivalgono ognuna alla data di ultima scrittura (opzione /TF) di un gruppo di files (\windows\*.ini) dati in pasto all'utility dir (dir /?). Infatti, digitando: C:\>dir \windows\*.ini /TF a video risulta la lista di cui sopra, ma molto più dettagliata. Supponendo, però, di scomporre l'output in stringhe di testo separate da spazi, si potrebbe identificare ogni stringa (token) come valore di una o più variabili in numero pari a quello delle stringhe stesse: Cio sarebbe utile per identificare una sola variabile il cui valore è esattamente cio di cui si necessita. Infatti, \miofile.txt sorgente e miofile_06022017.txt destinazione, differiscono nel nome proprio in base alla data. Come si fa in un batch ad assegnare un valore ad una variabile che cambia in funzione dell'output prodotto da un'utility che scrive a video ? Di solito, viene utilizzata la direttiva For (For /?) che esegue in modo ricorsivo cio che viene specificato di seguito. Infatti, digitando: for /f %a in ... do si fa in modo che la variabile %a acquisisca valori sempre diversi in base alle condizioni specificate tra in e do; La variabile %a, può subire ulteriori affinamenti derivanti dalla specifica di una condizione più restrittiva, quale può essere ('"dir \windows\*.ini /TW|findstr "^^[0-9]""'). Il carattere "|" (pipe), viene tradotto come "cio che è in output dal risultato di cio che mi precede lo passo come input a cio che mi succede", pertanto ogni singola riga prodotta in output dal comando dir, verrà processata in input da findstr (findstr /?). La condizione specificata in findstr, è un espressione regolare che impone di estrarre ad ogni inizio riga la prima stringa di testo che contiene uno o più caratteri inclusi nel range [0-9], di fatto la nostra data. Siccome nessuna delle righe precedenti l'indicazione del file *.ini contiene i caratteri specificati nel range indicato, alla variabile %a sarà associato un valore pari alla stringa estratta da findstr per ogni file in lista visualizzato da dir. A conclusione del ciclo for ...in ... do, %a conterrà il valore della data relativa all'ultimo file .ini. Poichè serve una sola data relativa ad un nome file specifico, basta indicare il nome in dir, cioè: for /f %a in ('"dir \windows\desktop.ini /TW|findstr "^^[0-9]""') do @echo %a Sembra fin troppo semplice, ma non è proprio così. Quando si ha a che fare con percorsi di rete, il comando dir \\[percorso] non funziona. (Vedasi UNC path name) Affinchè esso produca identico risultato che ci si aspetterebbe agendo sui percorsi in locale, basta mappare il percorso di rete su un identificativo di drive, specificando la lettera attraverso il comando net use, es: net use y: \\myserver\mydir for /f %a in ('"dir y:\miofile.txt /TW|findstr "^^[0-9]""') do @echo %a A questo punto, superato il principale scoglio, la stesura del batch dovrebbe scorrere velocemente e con minimo impegno. Ultimo appunto: La variabile %a può contenere valori di data con separatore '/', ma nel nome del file destinazione questi non devono figurare, pertanto supponendo che la varabile %a contenesse una stringa pari a 06/12/2016, il seguente comando: echo %a:~0,2%%a:~3,2%%a:~6,4% produrrebbe come risultato 06122016
___________________________________
Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice |
![]() |
![]() |
![]() |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
|
|
![]() |
||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
Norman Malware Cleaner - AIUTO | sikano | Sicurezza&Privacy | 7 | 11-04-2008 16.28.32 |
Batch File Modifier 1.7 | Thor | Archivio News Software | 0 | 02-08-2007 13.40.02 |
[MDK] 10 - Problema con Wine | Gratisweb | Linux e altri Sistemi Operativi | 9 | 23-07-2004 18.31.08 |
Windows file protection:guida | Deuced | Windows 9x/Me/NT4/2000 | 7 | 16-03-2004 08.25.28 |