Telefonino.net network
 
| 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 » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 30-07-2011, 15.12.40   #1
Strauxss
Newbie
 
Registrato: 01-08-2010
Messaggi: 21
Strauxss promette bene
cercare file da una lista?

Ciao

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
Strauxss non è collegato   Rispondi citando
Vecchio 01-08-2011, 12.02.30   #2
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Bisogna vedere se i nomi dei file sono comprensivi del percorso oppure no...
LoryOne non è collegato   Rispondi citando
Vecchio 02-08-2011, 15.48.23   #3
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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.

Ultima modifica di LoryOne : 02-08-2011 alle ore 15.52.08
LoryOne non è collegato   Rispondi citando
Vecchio 03-08-2011, 11.46.42   #4
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Correggo

ps: Ricorda che se crei un file .bat, devi utilizzare il doppio % per puntare alla variabile
LoryOne non è collegato   Rispondi citando
Vecchio 08-08-2011, 16.45.35   #5
Strauxss
Newbie
 
Registrato: 01-08-2010
Messaggi: 21
Strauxss promette bene
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!
Strauxss non è collegato   Rispondi citando
Vecchio 08-08-2011, 17.29.26   #6
borgata
Gold Member
WT Expert
 
L'avatar di borgata
 
Registrato: 23-06-2004
Loc.: Cagliari
Messaggi: 13.333
borgata è un gioiello raroborgata è un gioiello raroborgata è un gioiello raroborgata è un gioiello raro
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
borgata non è collegato   Rispondi citando
Vecchio 08-08-2011, 23.04.44   #7
Strauxss
Newbie
 
Registrato: 01-08-2010
Messaggi: 21
Strauxss promette bene
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
Strauxss non è collegato   Rispondi citando
Vecchio 10-08-2011, 09.54.50   #8
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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
poi lancialo.
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
LoryOne non è collegato   Rispondi citando
Vecchio 10-08-2011, 10.42.50   #9
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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
ps:chiedo scusa.
LoryOne non è collegato   Rispondi citando
Vecchio 10-08-2011, 10.58.02   #10
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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 ?
LoryOne non è collegato   Rispondi citando
Vecchio 11-08-2011, 08.55.33   #11
Strauxss
Newbie
 
Registrato: 01-08-2010
Messaggi: 21
Strauxss promette bene
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
Strauxss non è collegato   Rispondi citando
Vecchio 11-08-2011, 09.59.51   #12
borgata
Gold Member
WT Expert
 
L'avatar di borgata
 
Registrato: 23-06-2004
Loc.: Cagliari
Messaggi: 13.333
borgata è un gioiello raroborgata è un gioiello raroborgata è un gioiello raroborgata è un gioiello raro
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!
borgata non è collegato   Rispondi citando
Vecchio 11-08-2011, 10.51.46   #13
Strauxss
Newbie
 
Registrato: 01-08-2010
Messaggi: 21
Strauxss promette bene
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?
Strauxss non è collegato   Rispondi citando
Vecchio 11-08-2011, 11.12.43   #14
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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
LoryOne non è collegato   Rispondi citando
Vecchio 11-08-2011, 11.18.07   #15
Strauxss
Newbie
 
Registrato: 01-08-2010
Messaggi: 21
Strauxss promette bene
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
Strauxss non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

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

Orario GMT +2. Ora sono le: 22.43.28.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.