View Full Version : [batch]Copiare File In Cartella E Nelle Sue Sottocartelle
skeleton
20-07-2009, 11:18
Salve a tutti, sono nuovo del forum.
vorrei chiedere come da titolo come si può copiare un file in una directory e in tutte le sue sotto directory, usando il linguaggio MS-Dos.
es.
echo Ho il file in "F:\"
echo Lo voglio copiare in "F:\dati"
echo ma "F:\dati" contiene altre cartelle, molte e non ho voglia di scrivere tutti i percorsi per copiare il file in tutte le sue sottodirectory oltre che nella cartella "dati"
Chiedo aiuto al più presto...
Ho già provato con copy:
copy "F:\orario.xls" "F:\dati\*"
....ma non funziona...
con xcopy:
xcopy /y /s "F:\orario.xls" "F:\dati"
...ma anche questo non funziona...
Grazie in anticipo....
...per favore se potete indicatemi gli sbagli che ho commesso se fosse possibile usare questi comandi...
Ho trovato tra i comandi dos il comando tree che crea la lsita di tutte le subdir a partire da quella in cui mi trovo, ma poi non so come proseguire...devo creare un file esterno che mi elenchi tutte le subdir per poi farlo leggere dal mio programma???
Non c'è modo di non creare file esterni, ma di rimanere sempre e solo nel mio programma, magari dandogli alcune variabili anzichè creare il file???
PS:è piuttosto urgente....
malocchio
20-07-2009, 14:17
Salve a tutti, sono nuovo del forum.
vorrei chiedere come da titolo come si può copiare un file in una directory e in tutte le sue sotto directory, usando il linguaggio MS-Dos.
es.
echo Ho il file in "F:\"
echo Lo voglio copiare in "F:\dati"
echo ma "F:\dati" contiene altre cartelle, molte e non ho voglia di scrivere tutti i percorsi per copiare il file in tutte le sue sottodirectory oltre che nella cartella "dati"
Chiedo aiuto al più presto...
Ho già provato con copy:
copy "F:\orario.xls" "F:\dati\*"
....ma non funziona...
con xcopy:
xcopy /y /s "F:\orario.xls" "F:\dati"
...ma anche questo non funziona...
Grazie in anticipo....
...per favore se potete indicatemi gli sbagli che ho commesso se fosse possibile usare questi comandi...
Ho trovato tra i comandi dos il comando tree che crea la lsita di tutte le subdir a partire da quella in cui mi trovo, ma poi non so come proseguire...devo creare un file esterno che mi elenchi tutte le subdir per poi farlo leggere dal mio programma???
Non c'è modo di non creare file esterni, ma di rimanere sempre e solo nel mio programma, magari dandogli alcune variabili anzichè creare il file???
PS:è piuttosto urgente....
Fammi capire se ho ben capito:
Tu hai un file in F: chiamato orario.xls e questo singolo file lo vuoi copiare in F:\dati e tutte le sue sottocartelle...
Aparte la singolarità di una tale operazione, è corretto quello che ho scritto?
skeleton
20-07-2009, 14:24
Correttissimo:read:
Risponderesti al mio quesito, per favore???
Comunque devo effettuare tale operazione per conto di mio padre che lavora in una grande azienda...
malocchio
20-07-2009, 15:18
Correttissimo:read:
Mamma mia che brutta la programmazione batch :Puke:
Così dovrebbe andare:@echo off
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
F:
cd \
for /r dati %%p in (.) do copy orario.xls "%%p"
Tutto sta nel for. Le prime 3 linee le ho messe per scrupolo, forse va anche senza, le successive due non sono necessarie se sei già posizionato in F:
for /?Leggitelo bene, è un pacco ma il for è essenziale per fare cose carine come questa in batch. :asd:
Ciao :D
skeleton
20-07-2009, 18:04
Scusa se ti rompo ancora, ma cosa significa "%%p" e "in (.)"
Grazie per l'immediata risposta...
malocchio
20-07-2009, 18:22
Scusa se ti rompo ancora, ma cosa significa "%%p" e "in (.)"
Grazie per l'immediata risposta...
Beh %%p è una variabile. Normalmente le variabili hanno un solo %, ma se scrivi un programma batch in un file di testo allora lo devi sdoppiare.
Quindi, %p è la variabile del for, che assume un valore diverso per ogni ciclo di for. Il punto nelle parentesi (.) significa che ti stai riferendo alla cartella specificata prima di "%%p".
Dalla documentazione del for /r
Microsoft Windows XP [Versione 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\federico>for /?
Esegue il comando specificato per ogni file di un gruppo di file.
Per usare FOR in un programma batch, utilizzare la sintassi %%variabile
anziché %variabile. Le variabili possono essere differenziate utilizzando
lettere maiuscole e minuscole. Esempio: %i è diversa
da %I.
Se le estensioni ai comandi sono attivate è possibile utilizzare le seguenti
opzioni per il comando FOR:
FOR /R [[unità:]percorso] %variabile IN (gruppo) DO comando [parametri-comando]
Nella struttura della directory, a partire da [unità:]percorso, esegue
l'istruzione FOR in ogni directory della struttura. Se dopo /R non viene
specificato alcun percorso la directory corrente è assunta come iniziale.
Se per il parametro gruppo si usa solo un carattere punto (.)saranno
elencate le directory nella struttura della directory specificata.In rosso le parti interessanti.
Mi sono basato semplicemente su questo, facendo un paio di prove e verificando che funziona come dovrebbe.
skeleton
20-07-2009, 18:27
Grazie mille per la spiegazione, funziona perfettamente:read: !!!
Ciao:D
malocchio
21-07-2009, 08:08
Grazie mille per la spiegazione, funziona perfettamente:read: !!!
Ciao:D
Figurati, è stata un'occasione anche per me per imparare qualcosa di utile! :asd:
Alla prossima
h4ckt4rus
10-05-2013, 14:44
Sono imbattuto in questo thread navigando tra la pagine di google alla ricerca disperata di una soluzione ad un mio problema (ahimè stupido ma non molto facile) ed in parte l'ho trovata seguendo questo ciclo di for
for /r dati %%p in (.) do copy orario.xls "%%p"
Ma se volessi copiare il file non in tutte le subdir ma in in alcune ben determinate come dovrei modificarlo??
mi spiego meglio, ho una root dir che rappresenta il mese poi x subdir che rappresentano i giorni del mese e ogni subdir giorni mese ha la sua cartella downloads. io vorrei copiare il file orario.xls nella subdir download di ciascun giorno mese. Nella speranza di essermi spiegato chiaramente ringrazio i quanti vorranno darmi delle indicazioni
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.