Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Eine Tabelle aus einer großen CSV exportieren

Frage Entwicklung Batch & Shell

Mitglied: chrislm

chrislm (Level 1) - Jetzt verbinden

29.02.2012, aktualisiert 18.10.2012, 3331 Aufrufe, 39 Kommentare

Ich habe gesehen das du ein Meister der batchdateien bist. Ich habe dort ein kleines Problem mit einer, ich möchte gerne aus einer CSV eine bestimmte Tabelle seperat in eine Datei schreiben. In dieser Tabelle befinden sich bildnahmen welche ich später durch eine schleife automatisch kopieren will. Leider hat die CSV recht viele Spalten sodass ich es nicht geschaft bekomme saubere daten zu bekommen. Das problem schein darin zu liegen das verschiedene Felder nicht ausgefüllt sind und so teilweise ignoriert werden, meien Spalte ist die 60ste in der Tabelle... Setze ich die Tabelle auf spalte 1 oder 7 z. b. habe ich auch die Daten drin. Aber je weiter hinter das geht umso schlimmer wird es. in meinem Falle nun wird keine Datei mehr angezeigt.
Was kann ich denn nun tun?

for /f "tokens=60,61,61 delims=;" %%a in (muster.csv) do echo %%a>>test.csv

Oder kann ich auch nach Feldnamen gehen....?

vielen dank
39 Antworten
Mitglied: bastla
29.02.2012 um 11:55 Uhr
Hallo chrislm und willkommen im Forum (ja, wir mögen hier eine - zumindest kurze - Begrüßung)!

Abgesehen von der Tatsache, dass "for /f" keine 60 Tokens verwenden kann, wäre es sinnvoll, zumindest eine Beispielzeile (in "Code"-Formatierung) zu posten, damit ersichtlich wird, welche Daten (insbes auch hinsichtlich Sonderzeichen) enthalten sind ...

Und nur zur Sicherheit: Es geht ausschließlich um die Spalte 60?

Ansonsten: Gibt es irgend einen Einwand Deinerseits gegen die Verwendung von VBS (zur Not auch innerhalb eines Batches)?

Grüße
bastla
Bitte warten ..
Mitglied: chrislm
29.02.2012 um 13:10 Uhr
Es geht mit um die Fremdkunden ID2:
ID;ORDER_ID;Abotyp;Abocode;Objekt;Version;RE_ANREDE;RE_VORNAME;RE_NACHNAME;RE_ZUSATZ;RE_STRASSE;RE_PLZ;RE_STADT;RE_LAND;RE_TEL;RE_FAX;RE_MAIL;Zahlungsart;BLZ;Kontonummer;Bank;WE_ANREDE;WE_VORNAME;WE_NACHNAME;WE_ZUSATZ;WE_STRASSE;WE_PLZ;WE_STADT;WE_LAND;WE_TEL;WE_FAX;WE_MAIL;Praemienartikel;Artikel_Nr;LA_ANREDE;LA_VORNAME;LA_NACHNAME;LA_ZUSATZ;LA_STRASSE;LA_PLZ;LA_STADT;LA_LAND;LA_TEL;LA_FAX;LA_MAIL;Zahlungsrhythmus;VKZ;Vertreter_NR;Lieferbeginn;Fremdkunden ID;Freiheftlieferung;Gutschr_ für Bankeinzüge €;Orga_Nummer;GEB_Datum;ZahlWahlDatum;Praemienartikel2;Praemienartikel3;Werbeverbot;Vertragsdatum;Fremdkunden ID2;Rabatt;Fremdkunden ID_lang;JJMMHH;konstante_Hefte;Wiederholung;Hefte_bis_LE

Leider kann ich kein visual basic.... wenn man es als Befehl in eine Batch stecken kann, währe das auch OK. In der FremdkundenID 2 stehen die Bilder welche ich dann aus einem Ordner kopieren muss.
Bitte warten ..
Mitglied: Skyemugen
29.02.2012 um 14:47 Uhr
Aloha,

hm, tut es diese Lösung?

01.
@echo off & setlocal 
02.
 
03.
for /f "usebackq tokens=31,* delims=;" %%s in ("datei.csv") do call :Ablauf "%%t" 
04.
pause 
05.
 
06.
:Ablauf 
07.
for /f "tokens=29-31,* delims=;" %%m in (%1) do ( 
08.
	echo %%m;%%n;%%o>>"neu.csv" 
09.
10.
goto :eof
müsste doch genau 60, 61, 62 sein

greetz André
Bitte warten ..
Mitglied: chrislm
29.02.2012 um 14:58 Uhr
Vielen dank erstmal für die Antworten.

Es klappt leider nur soweit das ich dir Kopfzeile exportiert habe aber keine Daten..
Bitte warten ..
Mitglied: Skyemugen
29.02.2012 um 15:01 Uhr
Aloha,

achja in deinem Bandwurm eines Satzes stand ja noch etwas von nicht ausgefüllte Spalte, und wenn die Laufvariable nicht definiert wird, passiert natürlich auch nichts *pfeif*

Genau deswegen mag ich ja so den Batch-Bereich, die EPs sind immer so ... nichtssagend.

greetz André
Bitte warten ..
Mitglied: it-frosch
29.02.2012 um 15:11 Uhr
Hallo chrislm,

wenn in einem Datensatz nicht alle Felder befüllt sind sieht er dann so:

ID;;Abotyp ....... ->ORDER_ID ist nicht befüllt

oder so:

ID;Abotyp ....... ->ORDER_ID ist nicht befüllt

aus?

grüße vom it-frosch
Bitte warten ..
Mitglied: chrislm
29.02.2012 um 15:12 Uhr
Ich würde es ja uach mit vbs lösen nur leider habe ich bisher keinerlei funktionierende Codeschnipsel gefunden die ich für meine Bedürfnisse ändern kann...
Bitte warten ..
Mitglied: chrislm
29.02.2012 um 15:31 Uhr
Zitat von it-frosch:
Hallo chrislm,

wenn in einem Datensatz nicht alle Felder befüllt sind sieht er dann so:

ID;;Abotyp ....... ->ORDER_ID ist nicht befüllt

oder so:

ID;Abotyp ....... ->ORDER_ID ist nicht befüllt

aus?

grüße vom it-frosch
Die spalter seind einfach leer, in der CSV stehen nur zu hauf ;
Bitte warten ..
Mitglied: bastla
29.02.2012 um 15:48 Uhr
Hallo chrislm!

Na dann:
01.
Ein = "muster.csv" 
02.
Aus = "test.csv" 
03.
Delim = ";" 
04.
FeldNr = 60 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
Zeilen = Split(fso.OpenTextFile(Ein).ReadAll, vbCrLf) 
07.
For Each Zeile In Zeilen 
08.
    T = T & vbCrLf & Split(Zeile, Delim)(FeldNr - 1) 
09.
Next 
10.
fso.CreateTextFile(Aus).Write Mid(T, 3)
Grüße
bastla
Bitte warten ..
Mitglied: chrislm
29.02.2012 um 15:59 Uhr
Sorry, war ein Tipfehler von mir, es geht. Aber die Einträge sind in " ", das müsste noch weg, dann ist es perfekt
Bitte warten ..
Mitglied: bastla
29.02.2012 um 16:06 Uhr
@skye
Zum Thema nicht ausgefüllte Spalte könntest Du ja in ähnlichen Fällen etwa so vorgehen:
01.
... set "Zeile=%%i" & call :ProcessLine 
02.
... 
03.
 
04.
:ProcessLine 
05.
set "Zeile=%Zeile:;;=; ;%" 
06.
set "Zeile=%Zeile:;;=; ;%" 
07.
for /f "tokens=15 delims=;" %%i in ("%Zeile%") do echo %%i
Grüße
bastla
Bitte warten ..
Mitglied: bastla
29.02.2012 um 16:08 Uhr
Hallo chrislm!

Das dürfte daran liegen, dass sich am Ende der letzten Zeile noch ein Zeilenumbruch befindet (eine Zeile, deren Feldanzahl nicht stimmt, sollte es ja wohl nicht geben) - sollte dann aber so gehen:
01.
Ein = "muster.csv" 
02.
Aus = "test.csv" 
03.
Delim = ";" 
04.
FeldNr = 60 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
Zeilen = Split(fso.OpenTextFile(Ein).ReadAll, vbCrLf) 
07.
For Each Zeile In Zeilen 
08.
    If Trim(Zeile) <> "" Then T = T & vbCrLf & Split(Zeile, Delim)(FeldNr - 1) 
09.
Next 
10.
fso.CreateTextFile(Aus).Write Mid(T, 3)
Grüße
bastla
Bitte warten ..
Mitglied: chrislm
29.02.2012 um 16:26 Uhr
Ja, es geht, habs mittlerweile, aber die Zeilen stehen in " ", bekommt man die noch weg...?
Bitte warten ..
Mitglied: bastla
29.02.2012 um 16:31 Uhr
Hallo chrislm!
Wenn es sich um Dateinamen handelt, sind die Anführungszeichen doch eher nützlich ...

... anyhow:
    If Trim(Zeile) <> "" Then T = T & vbCrLf & Replace(Split(Zeile, Delim)(FeldNr - 1), """", "")
Grüße
bastla
Bitte warten ..
Mitglied: chrislm
29.02.2012 um 16:47 Uhr
Ich wollte danach die Dateien die dort in der Datei stehen als quelle nutzen um genau diese aufgeführten Dateien in einen beliebigen Ordnuer zu kopieren. Ich denke theoretisch kann man das auch direkt über vba machen... wie würde das denn dann aussehen? Wenn ich nun hin gehe und führe copy von P:\bilderarchiv auf c:\bilder z.b...?
Bitte warten ..
Mitglied: Skyemugen
29.02.2012 um 17:50 Uhr
Aloha bastla,

ja, kam mir auch der Gedanke ABER wenn die Zeile jetzt mit ";" anfängt, dann tut sich mit der Schleife so oder so nichts, da kann ich drehen wie ich will, Zeilen, die mit Semikolon beginnen, ignoriert er, selbst wenn ich kackedreist mit 'findstr /B ";" "datei.csv"' arbeite, ohne Schleife gibt er mir die Zeile aus, mit Schleife wird "Zeile=" und das war's.

Da ich darauf keine Lösung bisher fand, ließ ich es ganz, theoretisch sollte aber Spalte eins ja gefüllt sein, also könnte man schon

01.
siehe unten
durcharbeiten lassen

greetz André
Bitte warten ..
Mitglied: it-frosch
29.02.2012 um 18:05 Uhr
Hallo Chrislm,

dann importiere die CSV mal so.

1. Dateiendung von CSV nach AAA umbenennen.
2. Import als Textdatei mit ; als Trennzeichen.

Jetzt sollten alle Daten des Feldes 60 in einer Spalte untereinander stehen.

Das Auslesen der Daten haben die Anderen bestimmt schon beschrieben.

grüße vom it-frosch
Bitte warten ..
Mitglied: bastla
29.02.2012 um 18:31 Uhr
@skye
Zeilen, die mit Semikolon beginnen, ignoriert er
... es sei denn, Du legst mit
for /f "eol=§ tokens=31,* delims=;" %%m ...
ein anderes EOL-Zeichen fest ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
29.02.2012 um 18:39 Uhr
Hallo chrislm!

Dann etwa so (wobei es den Zielordner schon geben muss und keine gleichnamigen Dateien im Zielordner existieren dürfen):
01.
Ein = "muster.csv" 
02.
Quelle = "P:\bilderarchiv\" '\ am Ende beachten 
03.
Ziel = "c:\bilder\" '\ am Ende beachten 
04.
Delim = ";" 
05.
FeldNr = 60 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
Zeilen = Split(fso.OpenTextFile(Ein).ReadAll, vbCrLf) 
08.
For Each Zeile In Zeilen 
09.
   If Trim(Zeile) <> "" Then fso.CopyFile Quelle & Replace(Split(Zeile, Delim)(FeldNr - 1), """", ""), Ziel 
10.
Next
Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
29.02.2012 um 19:06 Uhr
moin bastla &andré,

also ich habe das Jetzt mal so zusammengefasst
01.
@echo off &setlocal disabledelayedexpansion 
02.
:: echo on 
03.
set  "InFile=D:\Testordner\Datei.csv" 
04.
set "OutFile=" 
05.
set   "Cells=20 45 50 60 61 62 63 64 65 70 80 90" 
06.
 
07.
 
08.
if defined Outfile (set "Um=>") else set "Um=" 
09.
%Um% %OUTFILE% ( 
10.
for /f usebackqDelims^=^ eol^= %%i in ("%Infile%") do ( 
11.
	set Line="%%i" 
12.
	set "cell=0" 
13.
	set "incell=0" 
14.
	set "check=1" 
15.
	call :ReadCell %cells% 
16.
	echo( 
17.
18.
19.
if not defined OutFile >&3 pause 
20.
goto :eof 
21.
 
22.
:ReadCell 
23.
if %incell% neq 0 if %incell% equ %1 ( 
24.
	<nul set /p =" 
25.
	if "%2" equ "" goto :eof 
26.
	<nul set /p =";" 
27.
	set /a "cell =%2-%1" 
28.
	shift 
29.
)  
30.
if %cell% equ 0 set /a cell =%1 
31.
2>nul set /a x=1/((cell-1)/30) && set /a Cell -=30 , Token=30 || set /a Token=Cell 
32.
set /a incell +=Token 
33.
setlocal enabledelayedexpansion 
34.
if defined check set "Line=!Line:;=";"!" 
35.
for /f "Tokens=%Token%* delims=;" %%a in ("!Line!") do endlocal&(set "Line=%%b" 
36.
	if %incell% equ %1 <nul set /p ="%%~a" 
37.
	set "ChecK=" 
38.
	goto :ReadCell 
39.
)
PS.
01.
for /f "delims=" %%i in ('findstr /n "^" "datei.csv"') do (set Line=%%i 
02.
  set "Line=!Line:*:=!" 
03.
 call untenrum 
04.
)
... solte immer in der Schleife funktionieren

Gruß Phil
Bitte warten ..
Mitglied: bastla
29.02.2012 um 19:15 Uhr
Hallo PH!

Hattest Du eigentlich mit %Um% auch noch etwas vor?

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
29.02.2012 um 19:21 Uhr
Oh vergessen.
Ähhm - ja die Umleitung.

Mach ich gleich mal rein

Gruß Phil
Bitte warten ..
Mitglied: Skyemugen
29.02.2012 um 19:22 Uhr
Aloha bastla,

ach dammit, stimmt ja, dieses gottverdammte Semikolon ist ja der default bei eol, meine Fresse, was die Redmonder Praktikanten sich dabei gedacht haben, ist mir schleierhaft.

Ich dreh voll am Rad, mich macht die cmd heute so gaga und fertig, den Passierschein A-38 bitte *wuaaaaaaaargh*

01.
@echo off & setlocal 
02.
for /f usebackqDelims^=^ eol^= %%s in ("datei.csv") do ( 
03.
	set "Zeile=%%s" 
04.
	echo %%s^|findstr /B ";">nul && set "Zeile= %%s" 
05.
	call :Ablauf 
06.
07.
pause 
08.
goto :eof 
09.
 
10.
:Ablauf 
11.
set "Zeile=%Zeile:;;=; ;%" 
12.
set "Zeile=%Zeile:;;=; ;%" 
13.
for /f "tokens=31,* delims=;" %%m in ("%Zeile%") do call :Bereich "%%n" 
14.
goto :eof 
15.
 
16.
:Bereich 
17.
for /f "tokens=29,* delims=;" %%i in (%1) do echo %%i>>"neu.csv" 
18.
goto :eof
ich verstehe es nicht,. die Zeile wird immer " %%s", ich habe erst versucht im Ablauf set "Zeile= %Zeile%", ja hat er wunderbar im set übernommen, war ihm in der Schleife dann aber wieder scheißegal, sodass die Tokens nicht stimmten, also ewig rumgebastelt, momentan passen die Tokens aber eigentlich ist es nicht korrekt und wenn ich
echo %1|findstr /B ";">nul && set "Zeile= %1" in den Ablauf reinnehme (mit der Anpassung beim call), ist es ihm auch wieder scheißegal ... ich blick's nicht, ehrlich


edit: *brabbel*
edit: siehe bastlas Kommentar
edit: siehe Phils Kommentar
Bitte warten ..
Mitglied: bastla
29.02.2012 um 19:24 Uhr
... und was mir noch aufgefallen ist: In Zeile 8 hätte ich eher "Outfile" erwartet ... hat sich/hast Du inzwischen erledigt ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
29.02.2012 um 19:28 Uhr
Hallo Skye!
echo %1|findstr /B ";">nul && set "Zeile= %1"
Woher hast Du %1, und steht das ggf unter Anführungszeichen?

Übrigens: Wenn nicht gerade Feld 1 gesucht ist, macht's ja eigentlich nix, wenn in allen Zeilen ein Leer- oder anderes Zeichen an den Anfang montiert wird ...

Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
29.02.2012 um 19:40 Uhr
Aloha bastla,

FUUUUUUUUUUUUUU (kennst du das passende Bild dazu?) der cmd

das ist so hirnverbrannt, dass es wirklich nur in der folgenden Konstellation funktioniert:

*brabbel* was ich alles an Möglichkeiten mit %1 und %~1 hatte aber neee, alles auf %~1 bis dato natürlich noch nicht, heißt also, oben müsste es dann einfach nur echo %%s sein, leck mich doch fett, ich geh Abend essen. Es macht für mich keinen Sinn.

Danke & greetz

André
Bitte warten ..
Mitglied: pieh-ejdsch
29.02.2012 um 19:54 Uhr
Hi,

also
01.
for /f usebackqDelims^=^ eol^= %%s in ("datei.csv") do ( ....
Tut es mit jedem Zeichen am Anfang

Gruß Phil
Bitte warten ..
Mitglied: Skyemugen
29.02.2012 um 19:59 Uhr
Aloha Phil,

jepp kam mir in den Sinn, war aber nicht mehr ganz sicher, wo überall maskiert werden musste und verwarf es wieder ;D

Muss ich mir wirklich mal einprägen, ist ja doch häufiger nützlich in letzter Zeit.

greetz André
Bitte warten ..
Mitglied: bastla
29.02.2012 um 20:17 Uhr
Hallo PH!

Zur Not sollte es auch mit
for /f "usebackq tokens=* eol=" %%s in ("datei.csv") do ( ....
gehen ...

Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
29.02.2012, aktualisiert 18.10.2012
Bitte warten ..
Mitglied: pieh-ejdsch
29.02.2012 um 20:27 Uhr
Hi bastla,
ja da ist dann das Anführungszeichen das EndOfLine Zeichen.

Gruß Phil
Bitte warten ..
Mitglied: Skyemugen
29.02.2012 um 20:30 Uhr
Aloha Phil,


.. wobei, wenn " als erstes Zeichen vorkommt, klappt es mit deiner Variante hier auch nicht ... also in der Endausgabe ;D

... aber das liegt wohl an der gesamten Verarbeitung, da kann ich eol auch auf ¬ setzen

Hmm, warum eigentlich, ist ja somit noch nicht fehlerfrei *grummel*

greetz André
Bitte warten ..
Mitglied: bastla
29.02.2012 um 20:36 Uhr
Hallo Skye und PH!
da kann ich eol auch auf ¬ setzen
Amen.

Grüße
bastla

P.S.: ... oder VBS verwenden ...
Bitte warten ..
Mitglied: pieh-ejdsch
29.02.2012 um 20:39 Uhr
das habe ich oben schon eingebaut.

man - Was für ein Rattens-chwanz (<--oh Gott die Zensur schlägt wider zu - so ein Unfug das sind doch deutsche Wörter) wieder geworden ist.

Immer diese Tabellen- und Textbearbeitung.

Gruß Phil
Bitte warten ..
Mitglied: chrislm
01.03.2012 um 08:21 Uhr
Dort bekomme ich einen Fehler, denn er versucht auch die Fremdkunden ID2 zu kopieren die es natürlich nciht gibt. Ich habs getestet, wenn ich die Spalte umbenenne zu Bild1.jpg dann legt er los. Kann man ihn dazu bringen erst ab zeile 2 zu beginnen..?
Bitte warten ..
Mitglied: bastla
01.03.2012 um 10:38 Uhr
Hallo chrislm!
Kann man ihn dazu bringen erst ab zeile 2 zu beginnen..?
Kann "man" - soll man auch?

01.
Ein = "muster.csv" 
02.
Quelle = "P:\bilderarchiv\" '\ am Ende beachten 
03.
Ziel = "c:\bilder\" '\ am Ende beachten 
04.
Delim = ";" 
05.
FeldNr = 60 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
Zeilen = Split(fso.OpenTextFile(Ein).ReadAll, vbCrLf) 
08.
For i = 1 To UBound(Zeilen) 
09.
   If Trim(Zeilen(i)) <> "" Then fso.CopyFile Quelle & Replace(Split(Zeilen(i), Delim)(FeldNr - 1), """", ""), Ziel 
10.
Next
Grüße
bastla
Bitte warten ..
Mitglied: jeb-the-batcher
01.03.2012 um 11:52 Uhr
Hallo,

da mische ich mich doch auch noch mal ein...

Zitat von pieh-ejdsch:
for /f usebackqDelims^=^ eol^= %%s in ("datei.csv") do ( ....

Jetzt ist EOL aber ein Space, es ist dann deaktivert, aber nur weil delims auch noch auf space und TAB steht.
Und die Regel ist wenn das EOL-Zeichen auch ein Delim-Zeichen ist, ist die EOL-Funktion deaktiviert.

Wenn man aber keine Delims haben möchte, braucht man
01.
for /f ^"usebackqDelims^=^ eol^=^ 
02.
 
03.
delims=^" %%s in ("datei.csv") do ( ....
Dann steht das EOL-Zeichen auf Linefeed, das Zeichen kann aber selbst niemals in einer FOR /F Loop auftauchen.

Gruß
jeb
Bitte warten ..
Mitglied: chrislm
01.03.2012 um 12:17 Uhr
Also danke an alle, ich habe es so wie ich es wollte, vielen dank für die Mühe!!!
Bitte warten ..
Mitglied: pieh-ejdsch
01.03.2012 um 19:10 Uhr
moin Jeb,

Zitat von jeb-the-batcher:
> for /f usebackqDelims^=^ eol^= %%s in ("datei.csv") do ( ....
Jetzt ist EOL aber ein Space, es ist dann deaktivert, aber nur weil delims auch noch auf space und TAB steht.
Und die Regel ist wenn das EOL-Zeichen auch ein Delim-Zeichen ist, ist die EOL-Funktion deaktiviert.

Na dann schau nochmal genau auf die Zeile, der Delimiter wird doch auf nichts gesetzt. Das Nichtmaskierte Leerzeichen Vor der For-Variable %%s ist für die Abgrenzung zu den FOR-Optionen.

01.
@set Prompt=$g 
02.
echo on 
03.
04.
echo( 
05.
@echo Die obere Schleife ist nur zum nachvollziehen 
06.
echo( 
07.
echo 1. Kein EOL: 
08.
rem 1. 
09.
for /f tokens^=1-2Delims^=^,eol^= %%i in ("  .  .") do @echo _%%i_%%j_ 
10.
echo( 
11.
echo 2. Wenn Hier EOL ein Leerzeichem waere, 
12.
echo wuerde die Ausgabe auch ohne Leerzeichen sein 
13.
rem 2. 
14.
for /f tokens^=1-2Delims^=^,^ eol^= %%i in ("  .  .") do @echo _%%i_%%j_ 
15.
echo( 
16.
echo 3. so wie hier 
17.
rem 3. 
18.
for /f "tokens=1-2eol= Delims=, " %%i in ("  .   .") do @echo _%%i_%%j_ 
19.
echo( 
20.
pause 
21.
)3>&1
also kannst Dein LF Konstrukt gleich mit dem anderen (Kein EOL) ersetzen. (obwohl Deins hat was, ich mache mir mittlerweile auch multiple Batcheszeilen)
01.
"C:\Windows\sleep.exe" 1 2>nul >&2 && set "Warte=2>nul >&2 "C:\Windows\sleep.exe" "^ 
02.
 || (timeout 2>&1) |find "FEHLER:" >nul && set "Warte=2>nul >&2 Timeout /NOBREAK /T "^ 
03.
 || (waitfor 2>&1) |find "FEHLER:" >nul && set "Warte=2>nul >&2 Waitfor x /T "^ 
04.
 || set "Warte=2>nul >&2 ping localhost -n " 
05.
 
06.
set ErrorOut= /c:"Syntaxfehler." ^ 
07.
 /c:"Datei .* nicht gefunden"
Gruß Phil
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
Bestimmte Daten aus eine CSV-Datei in eine Excel-Tabelle importieren (2)

Frage von MariaElena zum Thema VB for Applications ...

Entwicklung
Eine Analyse-csv via Powershell in Sharepoint exportieren? (2)

Frage von Scuzzy zum Thema Entwicklung ...

VB for Applications
gelöst Excel VBA .csv Import in Tabelle x, ab Spalte y

Frage von drimrim zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...