|
| 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 » | |
30-07-2011, 15.12.40 | #1 |
Newbie
Registrato: 01-08-2010
Messaggi: 21
|
cercare file da una lista?
Ho una dir (con subdir) contenente circa 10000 files, di questi file me ne servirebbero circa 1000 i cui nomi ho in un elenco txt. Vorrei sapere che comando posso usare per far si che un batch o vbs cerchi i file al mio posto e me li copi in una dir a mia scelta. Ho letto che dovrei usare il comando "FOR loop" ma non ci ho capito niente HELP MEEEE Ultima modifica di Strauxss : 30-07-2011 alle ore 16.29.44 |
01-08-2011, 12.02.30 | #2 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Bisogna vedere se i nomi dei file sono comprensivi del percorso oppure no...
|
02-08-2011, 15.48.23 | #3 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
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 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 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 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 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. Ultima modifica di LoryOne : 02-08-2011 alle ore 15.52.08 |
03-08-2011, 11.46.42 | #4 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Correggo
ps: Ricorda che se crei un file .bat, devi utilizzare il doppio % per puntare alla variabile
|
08-08-2011, 16.45.35 | #5 |
Newbie
Registrato: 01-08-2010
Messaggi: 21
|
LoryOne, che dire...sembra geniale ma, contestualmente, non ci ho capito una fava
i nomi non sono comprensivi di percorso, si chiamano ad esempio: "tabulato generale secondo semestre 1998" e il comando che mi serve dovrebbe cercare esattamente questo testo, quindi se scova un documento che si chiama "20-4-56565 tabulato generale secondo semestre 1998 (locale)" dovrebbe copiarmelo perchè all'interno del nome del file c'è la particella "tabulato generale secondo semestre 1998" Ho specificato questo perchè ci sono anche documenti simili tipo: "20-4-56565 tabulato generale primo semestre 1998 (locale)" che non mi interessano. Dici che è possibile creare un bat che mi faccia questo lavoro e che mi copi i file presenti nella lista in una dir a mia scelta? Grazie infinite! |
08-08-2011, 17.29.26 | #6 |
Gold Member
WT Expert
Registrato: 23-06-2004
Loc.: Cagliari
Messaggi: 13.333
|
la selezione dei file la puoi controllare direttamente con comando che ti ha dato.
Una volta che sei sicuro che faccia il lavoro che ti serve, allora modifichi il comando di visualizzazione con quello di copia. Ho idea comunque che lo script di sopra cerchi solo i nomi esatti, e non quelli contenuti. Al momento non so come fare un confronto, in bash risolvi facilmente con un grep, qui non saprei. EDIT: questo dovrebbe funzionare echo "stringa_letta" | find /I "sottostringa_da_trovare" Se la sottostringa viene trovata, allora viene mostrata stringa_letta, altrimenti nulla. Ovviamente è da sistemare un po', ma come base può andare bene.
___________________________________
La risposta è dentro di te... e però, è sbagliata! Ultima modifica di borgata : 08-08-2011 alle ore 18.31.02 |
08-08-2011, 23.04.44 | #7 |
Newbie
Registrato: 01-08-2010
Messaggi: 21
|
scusate ma forse non sono stato chiaro, io di programmazione sono a zero totale. Ho scritto qui perchè non ho trovato un programma che facesse questo lavoro e allora confidavo nel vostro aiuto
|
10-08-2011, 09.54.50 | #8 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Beh, direi che sono saltate fuori altre informazioni che avevi omesso in prima battuta e non sono poi così superficiali.
In un .bat, immetti questo "codice" Codice:
@FOR /F "tokens=*" %%G IN (c:\123.txt) DO @FOR /F "tokens=*" %%C IN ('dir /b /s C:\*%%G*') DO @echo %%C&pause Presuppone che 123.txt si trovi su C, ma tu devi fornirgli il percorso ed il nome del file testaule che hai tu. Ti ricerca sull'intero HD (C:\) tutti i nomi dei file che contengono i nomi dei file specificati. Attenderà che tu prema un tasto per proseguire... In questo modo vedi se i nomi dei files che vuoi copiare sono esattamente quelli che vorresti che fossero copiati. Quel '*' indica "Tutto cio che". Se viene posto prima del nome del file, ricerca tutto cio che lo precede Se viene posto dopo il nome del file, ricerca tutto cio che lo succede Se hai un testo chiamato "tabulato generale secondo semestre 1998", e fai una ricerca per "*tabulato generale secondo semestre 1998", il PC troverà: "20-4-56565 tabulato generale secondo semestre 1998", ma scarterà "20-4-56565 tabulato generale secondo semestre 1998 (locale)" Se hai un testo chiamato "tabulato generale secondo semestre 1998", e fai una ricerca per "*tabulato generale secondo semestre 1998*", il PC troverà: "20-4-56565 tabulato generale secondo semestre 1998 (locale)" Non troverà mai "20-4-56565 tabulato generale primo semestre 1998 (locale)" poichè "20-4-56565 tabulato generale" è in comune, ma subito dopo c'è "secondo semestre 1998" che lo identifica in modo univoco. L'ultima parte che ti serve per la copia è: ... DO @IF NOT EXIST [Path dest]\"%%G" copy "%%C" [Path dest] ps: Stai tranquillo, questa non è programmazione bensì automazione Ultima modifica di LoryOne : 10-08-2011 alle ore 10.09.57 |
10-08-2011, 10.42.50 | #9 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Correggo
Poichè i nomi contengono spazi, è necessario fare buon uso dei doppi apici, pertanto:
Codice:
@FOR /F "tokens=*" %%G IN (c:\123.txt) DO @FOR /F "tokens=*" %%C IN ('dir /b /s C:\"*%%G*"') DO @echo %%C&pause |
10-08-2011, 10.58.02 | #10 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Correggo2
In ...DO @IF NOT EXIST [Path dest]\"%%G" copy "%%C" [Path dest] c'è un piccolo errore che però non influisce sul risultato finale. Sei in grado Strauxss di capire dove vanno posti gli asterischi affinchè "@IF NOT EXIST ..." faccia il suo lavoro ?
|
11-08-2011, 08.55.33 | #11 |
Newbie
Registrato: 01-08-2010
Messaggi: 21
|
mi sa che sbaglio qualcosa, io ho creato un bat con questi comandi:
@FOR /F "tokens=*" %%G IN (c:\123.txt) DO @FOR /F "tokens=*" %%C IN ('dir /b /s F:\"*%%G*"') DO @echo %%C&pause DO @IF NOT EXIST [C:\1]\"%%G" copy "%%C" [C:\1] ma il bat parte, mi mostra i nomi dei file che cerca, mi dice premere un tasto per continuare ma nella dir C:\1 non c'è niente l'errore...che devo togliere la parentesi? booo P.S. Per togliere la pausa che non vorrei avere basta levare %%C&pause ? Ultima modifica di Strauxss : 11-08-2011 alle ore 09.01.40 |
11-08-2011, 09.59.51 | #12 |
Gold Member
WT Expert
Registrato: 23-06-2004
Loc.: Cagliari
Messaggi: 13.333
|
Per la pausa puoi levare solo &pause
%%C fa parte del comando @echo, e mostra il nome "completo" del file che soddisfa i parametri di ricerca. Se non ti interessa visualizzare a schermo, puoi levare tutto il pezzo, ossia "DO @echo %%C&pause" (che ha lo scopo bloccare il procedimento per farti vedere il file che sta per copiare). Per quanto riguarda le parentesi quadre, sono state utilizzate per indicare che non si tratta di un comando da prendere alla lettera ma un path da sostituire con quello che serve a te. Quindi si, le parentesi quadre sono da eliminare. Occhio che se i percorsi contengono spazi vanno messi tra virgolette.
___________________________________
La risposta è dentro di te... e però, è sbagliata! |
11-08-2011, 10.51.46 | #13 |
Newbie
Registrato: 01-08-2010
Messaggi: 21
|
Grazie, ho eliminato &pause e ora il bat va avanti senza chiedere conferma. Purtroppo però non mi copia niente e mi sembra anche stranamente veloce se per ogni nome di file deve far passare un migliaio di dir e sottodir.
Il comando usato è: @FOR /F "tokens=*" %%G IN (c:\123.txt) DO @FOR /F "tokens=*" %%C IN ('dir /b /s F:\"*%%G*"') DO @echo %%C DO @IF NOT EXIST C:\1\"%%G" copy "%%C" C:\1\ beh, nelle varie diri e sottodir di F:\ ci sono spazi, dici che è per questo che non trova niente? |
11-08-2011, 11.12.43 | #14 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Per vedere cosa fa la shell, fai:
1 - Start->esegui 2 digita cmd e dai invio 3 Trascina il file .bat all'interno della finestra su sfondo nero (la shell) 4 Dai invio |
11-08-2011, 11.18.07 | #15 |
Newbie
Registrato: 01-08-2010
Messaggi: 21
|
vedo lo stesso che vedo quando lancio il bat, mi appaiono i vari percorsi dei file che trova (e sono anche giusti) solo che non me li copia nella dir che ho messo
|
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
[VISTA]stranezza andando con cursore su lista cartelle e/o file... | cippico | Windows 7/Vista/XP/ 2003 | 1 | 03-01-2008 03.19.52 |
Problema con eMule | SuperPippo105 | Software applicativo | 6 | 11-05-2005 11.56.33 |
Dvd Pioneer 107 | pacixone | Masterizzazione Giochi Games | 7 | 25-03-2005 14.10.00 |
Windows file protection:guida | Deuced | Windows 9x/Me/NT4/2000 | 7 | 16-03-2004 08.25.28 |
Excel 2000: problema lista file recenti | damiano | Office suite | 0 | 31-01-2004 13.23.20 |