Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

bestimmte dateien mit findstr verschieben

kopi / 4 Antworten / Baumansicht Nickles

ich möchte von einem verzeichnis in das andere nur bestimmte dateien, die sich in einer dateiliste befinden, verschieben
zb.
for %i in (*.txt) do findstr /F:B:\Tmp1\string.txt %i |move %i B:\Tmp2\
es funktioniert aber nicht

danke für die hilfe

bei Antwort benachrichtigen
Andreas42 kopi „bestimmte dateien mit findstr verschieben“
Optionen

Hi!

Ich denke, dass Problem ist, dass die Ergebnisliste von FINDSTR in eine Datei umgelenkt werden muss. Dann müsste MOVE diese Ergebnisdatei übergeben bekommen und dann selbst als Dateiliste auswerten. Ich meine MOVE kann aber keine Dateilisten auswerten.

IMHO stimmt auch die Syntax von FINDSTR nicht. Aus der Onlinehilfe von WinXP habe ich folgende Syntax aus der Referenz zu FINDSTR:

findstr /g:suchdat.txt /f:dateilst.txt > resultat.aus

Damit sucht FINDSTR die Begriffe der Datei suchdat.txt in der Dateiliste dateilst.txt. Das Ergebnis wird dann in resultat.aus abgelegt.

Über FOR könnte man dateilst.txt erzeugen, das Problem ist dann einen Ersatz für MOVE zu finden, der resultat.aus auswerten kann und die dort aufgeführten Dateien verschiebt.

Bis dann
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
mr.escape kopi „bestimmte dateien mit findstr verschieben“
Optionen

Versuche es mal so (Tmp1string.txt mit der dateiliste, B:Tmp2 als zielpfad und natürlich ohne echo):
FOR /F "delims=?" %i IN (Tmp1string.txt) DO echo move "%i" B:Tmp2
und in einer batchdatei:
FOR /F "delims=?" %%i IN (Tmp1string.txt) DO echo move "%%i" B:Tmp2
Bei delims= muss irgendein zeichen stehen, welches nicht in den dateinamen vorkommt und sinnvollerweise gilt das für die joker "?" und "*".

Es kann allerdings ein problem mit den nicht ASCII-zeichen geben (stichwort codepage). Eine erstellung der liste mit "dir /b>Tmp1string.txt" o.ä. ist darum empfehlenswert.

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
kopi mr.escape „Versuche es mal so Tmp1string.txt mit der dateiliste, B:Tmp2 als zielpfad und...“
Optionen

es hat funktioniert aber so:
for /F "delims=?" %%i in (String.txt) do move %%i B:\Tmp2\%%i

besten dank
kopi

bei Antwort benachrichtigen
mr.escape kopi „es hat funktioniert aber so: for /F delims ? i in String.txt do move i B: Tmp2 i...“
Optionen

Wenn B:\Tmp2 ein ordner ist, dann braucht man kein "\%%i" dort anhängen und wenn in String.txt die dateinamen mit kompletten pfaden vorhanden sind dann darf man kein "\%%i" anhängen. Bei beidseitig gültigen, relativen pfaden hingegen, ist die angaben erforderlich.

"B:Tmp2" ist übrigens eine relative pfadangabe zum aktuell gültigen verzeichnis auf laufwerk B. Wäre also gültig gewesen, wenngleich etwas unorthodox.

Auf die anführungszeichen beim move würde ich nicht verzichten, es sei denn ich bin mir sicher, dass keine leerstellen in den namen vorkommen.

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen