2012-10-22 18 views
5

Próbuję odczytać każdą linię z pliku tekstowego za pomocą polecenia partia.Odczytywanie linii z pustymi polami z pliku przy użyciu wsadu

Linie wewnątrz pliku ma kilka spacji, więc jest to przykład na wejściu:

This is the first line 
This is the second line 
... 

Używam następujący kod źródłowy

FOR /f %%a in ("%1") do (
    @echo %%a 
) 
goto:eof 

wyjście jest Następujące:

This 
This 
... 

Przeczytałem llowing wpisu w Stack Overflow, ale nie rozwiązuje mojego problemu. Batch : read lines from a file having spaces in its path

+0

Założenie, że '% 1' jest nazwą pliku, oznacza to, że opublikowany kod nie działa zgodnie z opisem. Albo musisz używać opcji '" usebackq "', albo twoja klauzula IN() nie może być cytowana. – dbenham

Odpowiedz

6

Spróbuj tego.

FOR /f "tokens=* delims=," %%a in ('type "%1"') do (
    @echo %%a 
) 
+2

Teraz kod odetnie każdą linię przy pierwszym wystąpieniu ','. – dbenham

2

Musisz ustawić separator na którym partia odczytuje do każdej linii

FOR /f "delims=;" %%a in ("%1") do (
    @echo %%a 
) 

Domyślnym separatorem do końca linii jest pół jelita grubego. Możesz też użyć znaku, którego nie zobaczysz w pliku, np. ~ lub ¬ lub coś podobnego.

+0

Dlaczego ustawienie ogranicznika na dziwną wartość, dlaczego nie po prostu ustawić go na nic? – jeb

+0

@jeb Jak ustawić go na nic? '" delims = "' ustawi go na spację jako domyślną, prawda? –

+0

Nie, jak pokazuje dbenham, '" delims = "' ustaw go na nic, tylko EOL nie może być ustawiony w ten sposób do pustej wartości, '" EOL = "' ustawi EOL na cytat. Ale EOL może być pusty w inny sposób. – jeb

3

Spódnica Bali C i Henry Gao wokół numeru.

Twój kod kończy wartość w pierwszym miejscu, ponieważ FOR/F jest przeznaczony do analizowania łańcucha na rozdzielone tokeny. Domyślnymi ogranicznikami są spacja i tabulator. Możesz zachować całą linię, ustawiając DELIMS na zero.

for /f "usebackq delims=" %%a in ("%~1") do echo %%a 

Ale nadal istnieją potencjalne problemy: Pętla FOR/F pomija puste wiersze, a także pomija linie, które zaczynają się od znaku EOL (; domyślnie).

Polecenie FOR (szczególnie wariant FOR/F) jest skomplikowaną bestią. Polecam lekturę http://judago.webs.com/batchforloops.htm dla dobrego podsumowania zakamarków polecenia FOR.

+0

Smutek. Link już nie działa ... –

Powiązane problemy