Crea un file in C:\ chiamato 123.txt
Immetti il nome dei file all'interno.
Supponi di aver inserito:
winhelp.exe
winhlp32.exe
Ora dal prompt del DOS (la shell di Windows) immetti questo comando:
Codice:
@FOR /F "tokens=*" %G IN (c:\123.txt) DO @echo %G
Come risultato otterai la lista che hai immesso nel file.
Il perchè è dovuto a quanto segue:
@PER ogni token [tokens=*] ai quali associo ogni volta la variabile %G che ricavo dal file specificato [/F] [IN (c:\123.txt)] devi eseguire [DO] la stampa dei tokens ricavati [@echo %G]
Ora dal prompt del DOS immetti questo comando:
Codice:
dir /b /s C:\winhelp.exe
Come risultato otterrai tutti i percorsi che contengono quel file, ossia:
C:\WINDOWS\winhelp.exe
C:\WINDOWS\system32\dllcache\winhelp.exe
Ora dal prompt del DOS immetti questo comando:
Codice:
@FOR /F "tokens=*" %C IN ('dir /b /s C:\winhelp.exe') DO @echo %C
Come risultato otterrai la lista fornita dal comando: dir /b /s C:\winhelp.exe
Se invece del nome del file specificato da te stesso includessi la variabile %G, in accordo con il primo @FOR che legge il contenuto dei file all'interno di C:\123.txt ?
Codice:
@FOR /F "tokens=*" %G IN (c:\123.txt) DO FOR /F "tokens=*" %C IN ('dir /b /s C:\%G') DO @echo %C
Tu otterresti prima:
C:\WINDOWS\winhelp.exe
C:\WINDOWS\system32\dllcache\winhelp.exe
e poi
C:\WINDOWS\winhlp32.exe
C:\WINDOWS\ServicePackFiles\i386\winhlp32.exe
C:\WINDOWS\system32\winhlp32.exe
Cosa significa tutto cio ?
Significa che devi passare il risultato del primo FOR al secondo, tenendo a mente che l'operazione che devi eseguire è una copia di file, non la stampa a video.
A te il completamento per ottenere il tuo scopo.
ps: Ricorda che se crei un file .bat, devi utilizzare il doppio @ per puntare alla variabile. Come avrai notato, lo stesso file si trova in più percorsi, quindi evita la richiesta di sovrascrittura se dovesse capitare con i tuoi files.