Batchdatei-Hilfe: Die in der CSV-Datei analysierten Werte können nicht in Variablen gespeichert werden

785
A.Garg

Ich habe eine .CSV-Datei (durch Kommas getrennt), aus der ich die Werte in bestimmten Spalten extrahieren muss, und dann muss ich diese Werte als Teilzeichenfolge angeben. Die Teilstringwerte sollten in die Ausgabedatei geschrieben werden.

Wenn ich jedoch versuche, die set-Anweisung in die for / f-Schleife zu setzen, werden die Werte nicht in Variablen gespeichert, was dazu führt, dass der SubString nicht wie erwartet funktioniert.

Hier finden Sie den Ausschnitt und empfehlen:

-suppose abcdefgh ist der Wert bei %% d

SETLOCAL ENABLEDELAYEDEXPANSION  for /F "usebackqtokens=1-4*delims=^," %%a in (temp.csv) do ( echo %%d set _id=%%d echo _clnt: %!_id!:~5,3% echo %%a,%%b,%%c,!_clnt! >> output.csv ) 

Ausgabe von oben:

abcdefgh _clnt: ~5,3 

Erwartete Ausgabe:

abcdefgh _clnt: fgh 
-1
Ihre 5. Zeile sollte `set _clnt =! _ Id: ~ 5,3!` Sein Worthwelle vor 5 Jahren 5
Hallo, ich habe es versucht, aber es gibt mir die Ausgabe als 'set _clnt =! _ Id: ~ 5,3!' da es die _id als String betrachtet und den Wert von _id für diesen Befehl nicht beibehält A.Garg vor 5 Jahren 3
Wenn ich es mit der von mir erwähnten Modifikation ausführte (plus einem weiteren `echo _clnt:! _Clnt!`), Erhalten Sie genau das Ergebnis, das Sie in Ihrem "Expected Outcome" gezeigt haben, und der Wert von _clnt wird auch in der `Ausgabe angezeigt. CSV-Datei. Was möchten Sie anders passieren? Worthwelle vor 5 Jahren 3

1 Antwort auf die Frage

0
Michael Harvey

Das funktioniert für mich

@echo off SETLOCAL ENABLEDELAYEDEXPANSION  for /F "usebackqtokens=1-4*delims=^," %%a in (temp.csv) do ( echo %%d set id=%%d set _clnt=!_id:~5,3! echo _clnt: !_clnt! echo %%a,%%b,%%c,!_clnt! >> output.csv ) 

Inhalt von temp.csv

x,y,z,abcdefgh 

Konsolenausgabe des Batch-Skripts:

abcdefgh _clnt: fgh 

Inhalt von output.csv nach dem Ausführen des Batch-Skripts:

x,y,z,fgh