Toon posts:

[2000] Bestanden zoeken dmv textfile met namen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb hier een textfile met bijna 1000 bestandsnamen. Nu moeten die bestanden gezocht worden in folder met heel veel subfolders en het liefst ook nog gecopieerd worden.
Ik heb wel eens geexperimenteerd met een dos batchfile, en dat werkte ook wel, maar toen stonden de files in 1 map. Is het mogelijk om met de copy functie in onderliggende mappen te zoeken?
Of, en ik ben al een tijdje naar op zoek (GOT, download.com, tucows etc.), is er een tooltje die een searchstring uit een textfile kan halen?

  • mutsje
  • Registratie: September 2000
  • Laatst online: 24-03 15:48

mutsje

Certified Prutser

je moet in een batch file een variabele zetten die de bestandsnaam aanroept in jou textfile. als ie die bestandsnaam gehad heeft ga door naar volgende tot je op het einde bent. Gebruik xcopy ipv copy heb je al iets meer mogelijkheden.

Verwijderd

Topicstarter
Okee, dat ga ik proberen.
Is het mogelijk om daarvan een voorbeeldje te plaatsten, met variabelen etc. ben ik nog niet echt vertrouwd.

  • sverzijl
  • Registratie: Januari 2001
  • Laatst online: 13:56
als je alleen wilt zoeken :

code:
1
for /F %i in ('type searchlist.txt') do @dir /s/b %i

in searchlist.txt staan alle filenames (zonder path) die je wilt zoeken.

Wil je ze ook nog kopieren, dan kan je bijv de output van bovenstaand statement redirecten naar een 2e file en die vervolgens weer inlezen voor de copy :
code:
1
2
3
del foundlist.txt 2>NUL
for /F %i in ('type searchlist.txt') do @dir /s/b %i >>foundlist.txt
for /F %i in ('type foundlist.txt') do @copy /Y %i c:\temp

[ Voor 6% gewijzigd door sverzijl op 03-08-2005 15:06 ]


Verwijderd

code:
1
2
3
4
5
6
7
for /f %%a in (txtfile) do call :verwerk %%a
goto :eof

:verwerk
set filename=%*
for /f "delims=#" %%a in ('dir /s /b %filename% ') do copy %%a c:\dir
goto :eof


het zal zoiets moeten worden, wel even troubleshooten omdat de output van commando's kan verschillen (en ik het niet getest heb :))

edit @ sverzijl: /b switch werkt makkelijker :), maar waarom je een type doet van een txt file??? :)

[ Voor 39% gewijzigd door Verwijderd op 03-08-2005 15:33 ]


  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 27-03 16:09

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Kijk ook even naar Forfiles uit de Windows Resource Kit. Dit is een tool om files middels een batch te verwerken. Deze tool kan ook automatisch subdirectory's scannen.

Gecombineerd met een FOR commando geeft dit:
code:
1
for /f %%A in (txtfile) do Forfiles -Pc:\ -S -M %%A -C copy e:\dir
Deze regel scant de C:\ (inclusief subdirs) af naar bestanden met een naam die voorkomt in de txtfile en kopieert deze naar e:\dir.

De hier gebruikte opties van forfiles zijn: (forfiles kan nog wel iets meer)

-P = het pad waarin gezocht moet worden (let op geen spatie)
-S = inclusief subdirectory's
-M = filemask (dit is de variable %%A, welke de bestandsnaam is die uit de textfile gehaald is)
-C = het commando wat uitgevoerd wordt.

Het is maar net wat je handiger vindt. Met twee for-commando's wordt het script iets complexer, maar heeft in mijn ogen wel het grote voordeel dat er geen 'externe' tools nodig zijn.

Let overigens wel even op de mogelijke belasting van een dergelijk script. In alle getoonde oplossingen wordt eerst het eerste bestandsnaam ingelezen uit de txtfile, het pad en subdirs wordt vervolgens compleet gescand. De 2e bestandsnaam wordt ingelezen, weer wordt het complete pad gescand, etc. Dit kan een aardige belasting van je systeem opleveren.

Misschien dat er iemand is die weet hoe je de output uit een textfile (bestandsnaam in dit geval) tegen de indexing service kan aanhouden :? Als de indexing service draait is nl. de inhoud van de harddisk al gecatalogiseerd.

[ Voor 5% gewijzigd door Question Mark op 03-08-2005 19:37 ]

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Verwijderd

Topicstarter
Okee, ben er een beetje mee aan het stoeien geslagen, maar ik krijg niet het gewenste resultaat uit die laatste "ForFiles" lijn.

Dit heb ik nu als line in m'n batchfile:
code:
1
for /f %%A in (list.txt) do Forfiles -Pd:\ -S -M %%A -C copy d:\


Dit is list.txt:
code:
1
2
3
4
mkib2089e.tif
mkib2090e.tif
mkib2091e.tif
mkib2092e.tif


En dit zijn de errors die ik krijg:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
F:\>for_bat

F:\>for /F %A in (list.txt) do Forfiles -Pd:\ -S -M %A -C copy d:\

F:\>Forfiles -Pd:\ -S -M mkib2089e.tif -C copy d:\

Error path not found (3rd argument) line 485

F:\>Forfiles -Pd:\ -S -M mkib2090e.tif -C copy d:\

Error path not found (3rd argument) line 485

F:\>Forfiles -Pd:\ -S -M mkib2091e.tif -C copy d:\

Error path not found (3rd argument) line 485

F:\>Forfiles -Pd:\ -S -M mkib2092e.tif -C copy d:\

Error path not found (3rd argument) line 485

F:\>


De files staan wel degelijk op de juiste plaats, in een subdirectory van d:\

Wat doe ik hier fout? Ben zo'n kluns met dit soort dingen.

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 27-03 16:09

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Het eerste gedeelte gaat goed, de filemask wordt keurig uitgelezen. De fout zit hem in de spaties, ik heb het net nog even getest.
code:
1
for /f %%A in (list.txt) do Forfiles -Pd:\ -S -M %%A -C copy d:\


Moet worden:
code:
1
for /f %%A in (list.txt) do Forfiles -Pc:\ -S -M%%A -c"cmd /cCopy @PATH@FILE D:\"

Let dus op de spaties. Ook moet het commando in een 'nieuwe' omgeving uitgevoerd worden. Vandaar de noodzaak voor de extra CMD /C regel. Ik heb ook even de copy regel volgens de "regels" gemaakt (dus "copy source path"). De variabelen @PATH en @FILE zijn variabelen van Forfiles. Eea staat ook met examples uitgelegd in de help van Forfiles (forfiles /?).

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Verwijderd

Topicstarter
Ik heb je nieuwe code gebruikt, maar de bestanden worden niet naar de directory gecopieerd, moet ik nog iets doen met die variabelen? Ik probeer de help te begrijpen, maar kom er niet uit.

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 27-03 16:09

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Wat is de foutmelding of output die je nu krijgt? Ik heb bovenstaande net even getest, en bij mij werkt het wel.

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Verwijderd

Topicstarter
Ik heb eerst gewoon jouw code overgenomen en getest.
Daarna het laatste path verandert naar F:\test\

code:
1
for /f %%A in (list.txt) do Forfiles -Pc:\ -S -M%%A -c"cmd /cCopy @PATH@FILE F:\test\"


geeft nu:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
F:\>for_bat

F:\>for /F %A in (list.txt) do Forfiles -Pc:\ -S -M%A -c"cmd /cCopy @PATH@FIL
:\test\"

F:\>Forfiles -Pc:\ -S -Mmkib2089e.tif -c"cmd /cCopy @PATH@FILE F:\test\"

F:\>Forfiles -Pc:\ -S -Mmkib2090e.tif -c"cmd /cCopy @PATH@FILE F:\test\"

F:\>Forfiles -Pc:\ -S -Mmkib2091e.tif -c"cmd /cCopy @PATH@FILE F:\test\"

F:\>Forfiles -Pc:\ -S -Mmkib2092e.tif -c"cmd /cCopy @PATH@FILE F:\test\"

F:\>


Maar geen files in mijn destination folder. Wat gebeurd er nu precies, wordt ook de "source path" nagemaakt?

[ Voor 18% gewijzigd door Verwijderd op 05-08-2005 12:10 ]


  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 27-03 16:09

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Bestanden staan ook ergens op je C-Schijf? Daar ben je nu nl. aan het zoeken (-Pc:\) Output path (F:\test in jouw geval), moet bestaan. De code
code:
1
C:\>for /f %A in (c:\list.txt) do Forfiles -Pc:\ -M%A -c"cmd /cCopy @PATH@FILE C:\test\"

Geeft de volgende output:
code:
1
2
C:\>Forfiles -Pc:\ -Mscripts.rar -c"cmd /cCopy @PATH@FILE C:\test\"
        1 file(s) copied.


Enige aanpassing die ik heb, is dat ik niet door sub-dirs laat zoeken (duurt me even te lang voor testen), en dat ik de bestanden naar C:\test laat kopieren. Zoals je ziet werkt het gewoon. In het bestand c:\list.txt staat één entry "scripts.rar". Dit bestand wordt keurig gevonden en gekopieerd naar c:\Test

[ Voor 4% gewijzigd door Question Mark op 05-08-2005 12:53 ]

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Verwijderd

Topicstarter
Ik begin stilaan gek te worden denk ik.

Nu heb ik alles op c: staan. Alleen werk ik vanaf mijn win2000 partitie en dat is dus F:. Hier staat ook list.txt, maar die wordt steeds uitgelezen, want ik krijg steeds alle vier die files in de output in de commond prompt.

Mijn files staan dus in C:\eps (het moet een subdir zijn, anders heb ik niets aan deze oplossing)
C:\test als doel map bestaat ook.

Nu heb ik dit ingetiept:

code:
1
2
F:\>for /f %A in (list.txt) do Forfiles -Pc:\ -S -M%A -c"cmd /cCOPY @PATH@FILE C
:\test\


en dan krijg ik dit:


code:
1
2
3
4
5
6
7
F:\>Forfiles -Pc:\ -S -Mmaib0025.tif -c"cmd /cCOPY @PATH@FILE C:\test\

F:\>Forfiles -Pc:\ -S -Mmaib0026.tif -c"cmd /cCOPY @PATH@FILE C:\test\

F:\>Forfiles -Pc:\ -S -Mmaib0029.tif -c"cmd /cCOPY @PATH@FILE C:\test\

F:\>Forfiles -Pc:\ -S -Mmaib0030.tif -c"cmd /cCOPY @PATH@FILE C:\test\


Dus geen files copied....

Mis ik misschien essentiele stukjes software oid?

[ Voor 4% gewijzigd door Verwijderd op 05-08-2005 13:17 ]


  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 27-03 16:09

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Je mist je eindquote's ;)

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Verwijderd

Topicstarter
Erbij gezet.... maar geeft hetzelfde resultaat....

Edit, zelfs als ik jouw hele situatie nabouw, werkt 't niet.
  • 1 bestand in list.txt
  • geen subdirs (dus geen -S)
  • Alles op C:\
Hoe is het mogelijk....

EDIT2:

Ik ben nu op een andere machine helemaal opnieuw begonnen.
Forfiles.exe in de root gezet
mapje c:\test aangemaakt
mapje c:\file aangemaakt met daarin file.zip
list.txt aangemaakt met daarin de entry file.zip

Dan tiep ik in CMD dit in:
code:
1
2
C:\>for /f %A in (c:\list.txt) do Forfiles -Pc:\ -S -M%A -c"cmd /cCOPY @PATH@FIL
E C:\test\"


En dan krijg ik deze melding:
code:
1
2
3
4
5
6
CC:\>Forfiles -Pc:\ -S -Mfile.zip -c"cmd /cCOPY @PATH@FILE C:\test\"
The system cannot find the file specified.

Warning : Access denied (recursive set) line 292

C:\>

[ Voor 129% gewijzigd door Verwijderd op 05-08-2005 14:41 ]


  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 27-03 16:09

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Erg vaag. Als ik het hier thuis even nabouw gaat het goed, mits ik geen subdirs laat doorzoeken. Zelfde regels, maar dan met de optie -S gaat fout. Ik krijg dezelfde foutmelding als jij (error in line 292). Google ed. biedt hier geen oplossing voor :(

Dan maar met twee for-lusjes zoals eerder voorgesteld door iis5_rulez:
code:
1
2
3
4
5
6
7
for /f %%a in (list.txt) do call :verwerk %%a
goto end

:verwerk
for /f   %%A in ('dir /b /s %1 ') do copy %%A c:\test

:end

[ Voor 3% gewijzigd door Question Mark op 05-08-2005 19:47 ]

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Verwijderd

Topicstarter
Ja, inderdaad erg vaag.

De laatste optie met 2 for-lusjes lijt te werken, maar hoe wijs ik daarin de te doorzoeken folder aan?
Pagina: 1