Batch: Alle Dateien in einem Ordner nacheinander einlesen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
for %a in (*.*) do IRGENDWAS mit %a

mit Drag und Drop müsste sowas gehen:

for %a in("%~1") do WASAUCHIMMER mit %a

Internetgekillt 
Fragesteller
 04.09.2016, 17:56

ups da hat nur die halbe antwort geladen ^^

0
Internetgekillt 
Fragesteller
 04.09.2016, 18:13

for %a in ("%~1") do echo %a
pause

liefert im cmd ausgeführt:

"~1") do echo a" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

C:\Users\Andreas\Documents\Test>for ~1") do echo a

0
Internetgekillt 
Fragesteller
 04.09.2016, 18:28
@Internetgekillt

neuer code:

for %%a in ("%~1") do echo %a
pause

Das gibt wenigstens keine Fehlermeldung, aber es gibt nur "a" aus.

Ich bin mir nicht ganz sicher, was es ausgeben sollte, aber es sollte doch für jedes Element im Ordner etwas ausgeben...

0
MarkusGenervt  06.09.2016, 07:24
@Internetgekillt

In Batch-Skripten müssen die For-Variablen mit doppelten "%" angegeben werden. Also:

for %%a in (*.*) do echo %%a

Der Befehl

for %%a in ("%~1") do echo %%a

wird nicht den erhofften Erfolg haben und kann auch zu Problemen führen. Besser wäre folgendes:

for %%a in (%*) do echo %%a

Dadurch werden alle Parameter verarbeitet und es ergeben sich ggf. keine Probleme durch "missverstandene" Befehle. Natürlich voraus gesetzt, dass die Parameter ordentlich übergeben wurden.

0

Den beschriebenen Kontext-Menü-Eintrag wirst Du nur mit Hilfe der Registry einrichten können. Aber da solltest Du schon wissen, welche Datei-Typen, bzw. -Endungen mit dieser Batch verarbeitet werden sollen. Das geht aber auch global unter "HKCS\*\shell\command".

Wie das nun im Detail intern abgearbeitet werden soll, habe ich in meinen anderen Kommentaren bereits angedeutet.

Am Besten Du rufst an der Console einfach mal die Hilfen auf:

HELP FOR

oder

FOR /?

Darin stehen alle Informationen, die Du brauchst. Natürlich geht das auch mit allen anderen Befehlen.

Ok, also erstens: BATCH IST DER LETZTE MÜLL

Und nun zur Lösung des Problems:

for /R %~1 %%G in (*.*) do (call :foo "%%G")

man muss eine andere funktion aufrufen, denn DIESE BEHINDERTE SPRACHE erlaubt keine Variablendeklaration in einer for-Schleife. Zumindest kann man diese dann nicht mehr abrufen. Warum /R? Keine Ahnung ich hab einfach so lange rumprobiert bis es klappt. Warum %%G? Keine Ahnung, vermutlich weil BATCH SCHE*SSE IST!!! So den Rest meiner Probleme lasse ich jetzt mal weg.

Diese Antwort dient nur dazu, eine Lösung anzubieten, falls jemand durch googlen hierauf stößt.


pythonpups  04.09.2016, 23:28

Ich hätte es etwas weniger drastisch ausgedrückt, aber im Prinzip stimme ich völlig zu...

0
MarkusGenervt  06.09.2016, 07:35

Keine Ahnung, aber gleich SCHEI55E schreien!

Variablen-Deklaration geht sehr wohl innerhalb einer FOR-Schleife und der Aufruf einer CALL-Prozedur innerhalb einer FOR-Schleife erzeugt auch keinen Austritt aus der FOR-Schleife. Dasselbe gilt auch für einen IF-Befehl.

Versuch's mal mit diesem Befehl hier:

setlocal enabledelayedexpansion

Natürlich sollte man wissen, dass dann die ID's der Variablen von "%" in "!" geändert werden müssen.


BATCH ist keinesfalls Müll – zumindest nicht unter Windows. Aber man sollte diese popel-einfache Skript-Sprache auch mal lernen. Also es gibt wirklich keine Sprache, die einfacher zu erlernen ist. Wer das nicht mal kann, sollte echt nicht so peinlich aufdrehen!

2