2010-12-08 9 views
6

Um Zeilen aus einer Datei, in einer Batch-Datei zu lesen, was Sie tun:Batch: Leseleitungen aus einer Datei Leerzeichen im Pfad mit

for /f %%a in (myfile.txt) do (
    :: do stuff... 
) 

Angenommen, Sie Datei ist in C:\Program Files\myfolder

for /f %%a in ("C:\Program Files\myfolder\myfile.txt") do (
    echo %%a 
) 

Ergebnis:

C:\Program Files\myfolder\myfile.txt 

Dies scheint den angegebenen Pfad als String zu interpretieren und damit %%a i s dein gegebener Pfad.

Nichts davon in der Dokumentation, die ich bisher gefunden habe. Bitte jemand mir helfen, bevor ich mich erschieße.

+1

Bis jemand kommt mit einer besseren Antwort, COPY "C: \ Programme \ myfolder \ myfile.txt" temp.txt, Ihre for-Schleife, dann DEL temp.txt –

+0

@Gilbert: Ich hoffe, es ist keine Datei mit dem Namen "meine Datei.txt" .. – glmxndr

Antwort

6

Die Dokumentation, die Sie erhalten, wenn Sie help for eingeben, sagt Ihnen, was zu tun ist, wenn Sie einen Pfad mit Leerzeichen haben.

For file names that contain spaces, you need to quote the filenames with 
double quotes. In order to use double quotes in this manner, you also 
need to use the usebackq option, otherwise the double quotes will be 
interpreted as defining a literal string to parse. 

Standardmäßig ist die Syntax von FOR /F die folgenden.

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters] 
FOR /F ["options"] %variable IN ("string") DO command [command-parameters] 
FOR /F ["options"] %variable IN ('command') DO command [command-parameters] 

Diese Syntax zeigt, warum Ihre type Problemumgehung funktioniert. Weil die einfachen Anführungszeichen sagen, dass der Befehl type über seinen Ausgang ausgeführt wird. Wenn Sie die usebackq Option, die Syntax Änderungen hinzufügen:

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters] 
FOR /F ["options"] %variable IN ('string') DO command [command-parameters] 
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters] 

Jetzt können Sie doppelte Anführungszeichen Pfade zu Dateien, einzelne Anführungszeichen Literalzeichenfolgen und Backticks (Grab Akzente) setzen Befehle um auszuführen.

Sie wollen, dies zu tun:

for /f "usebackq" %%a in ("C:\Program Files\myfolder\myfile.txt") do (
    echo %%a 
) 
+0

Ich habe diesen Teil der Dokumentation verpasst. Vielen Dank ! – glmxndr

1

Es gefunden.

for /f %%a in ('type "C:\Program Files\myfolder\myfile.txt"') do (
    echo Deleting: %%a 
) 

Fragen Sie mich nicht einmal, warum das funktioniert.

+0

Da TYPE eine Textdatei anzeigt. Ihre FOR-Schleife verarbeitet die Zeichenfolge, die den Dateiinhalt von myfile.txt Good find darstellt. –

+0

Ja, aber es funktioniert mit "for/f", das zum Lesen von Dateien gedacht ist. Ich hätte erwartet, dass ich mit "for" ohne/f arbeite ... und das nicht. Wie auch immer ... Ich habe mich nicht selbst erschossen, das ist das Wichtigste. – glmxndr

0

einfach den unten Code teilen, in der Hoffnung, dass jemand profitiert bekommen.

Der unten stehende Code nimmt sowohl den Pfad mit Leerzeichen als auch, wenn die gelesenen Zeilen Leerzeichen haben, keine Probleme mit den Zeichen nach Leerzeichen.

FOR/f "tokens = * delims =" %% a in ('Typ "C: \ Progrem Datei \ My Program"') tun ( echo %% ein )

Verwandte Themen