Zweistelliges Jahr aus vorgegeben vierstelligen Jahr aus Textdatei
Hallo und guten Morgen
ich habe eine CSV-Datei, die Daten im folgenden Format enthält in vielen Zeilen enthält:
1234567;24.02.2018;10.03.2018;XY
Ich muß die Daten in folgendes Format umbauen:
1234567 24.02.1810.03.18XY
Ich kann mir über
FOR /F "SKIP=1 TOKENS=1-8 DELIMS=.;" %A IN (Dateiname.CSV) DO @echo %A %B %C %D %E %F %G %H
schon mal die einzelnen Bruchstücke auflisten lassen:
1234567 24 02 2018 10 03 2018 XY
Jetzt muß nur noch %D und %H von vierstelliges Jahr auf zweistelliges Jahr reduziert werden, aber da habe ich mein Problem, welches ich nicht gelöst bekomme, danach könnten alle Variablen passend zusammengeschrieben werden.
Kann mich jemand aufschlauen, wie ich die Jahreszahl innerhalb der For-Schleife reduzieren kann?
Vielen Dank & viele Grüße
Fahrrad
ich habe eine CSV-Datei, die Daten im folgenden Format enthält in vielen Zeilen enthält:
1234567;24.02.2018;10.03.2018;XY
Ich muß die Daten in folgendes Format umbauen:
1234567 24.02.1810.03.18XY
Ich kann mir über
FOR /F "SKIP=1 TOKENS=1-8 DELIMS=.;" %A IN (Dateiname.CSV) DO @echo %A %B %C %D %E %F %G %H
schon mal die einzelnen Bruchstücke auflisten lassen:
1234567 24 02 2018 10 03 2018 XY
Jetzt muß nur noch %D und %H von vierstelliges Jahr auf zweistelliges Jahr reduziert werden, aber da habe ich mein Problem, welches ich nicht gelöst bekomme, danach könnten alle Variablen passend zusammengeschrieben werden.
Kann mich jemand aufschlauen, wie ich die Jahreszahl innerhalb der For-Schleife reduzieren kann?
Vielen Dank & viele Grüße
Fahrrad
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 349338
Url: https://administrator.de/contentid/349338
Ausgedruckt am: 23.11.2024 um 10:11 Uhr
9 Kommentare
Neuester Kommentar
machst du das in der FOR-Zeile? Das geht nicht.
Aber anstatt danach dann nur %D% zu schreiben, schreibst du %D:~2,2% und erhälst die korrekte ausgabe.
Also "%D:~2,2%" da verwenden, wo du deine CSV neu zusammenbaust
sollte in sowas wie
1234567 24 02 18 10 03 2018 XY
enden
Aber anstatt danach dann nur %D% zu schreiben, schreibst du %D:~2,2% und erhälst die korrekte ausgabe.
Also "%D:~2,2%" da verwenden, wo du deine CSV neu zusammenbaust
FOR /F "SKIP=1 TOKENS=1-8 DELIMS=.;" %A IN (Dateiname.CSV) DO @ECHO %A %B %C %D %E %F %G %H
echo %A% %B% %C% %D:~2,2% %E% %F% %G% %H%
sollte in sowas wie
1234567 24 02 18 10 03 2018 XY
enden
Moin Fahrrad,
Laufvariablen der FOR-Anweisung lassen sich nicht mit den Teilstring-Funktionen auswerten; das geht nur mit Variablen, die auch mit SET definiert wurden.
Und wenn innerhalb einer FOR-Anweisung Variablen gesetzt UND ausgelesen/manipuliert werden sollen, dann muss zusätzlich mit "setlocal enableDelayedExpansion" gewerkelt werden.
Beispiel/proof-of-concept am CMD-Prompt
Im Batch dann optisch auf ein paar Zeilen auseinandergezogen:
Grüße
Biber
Laufvariablen der FOR-Anweisung lassen sich nicht mit den Teilstring-Funktionen auswerten; das geht nur mit Variablen, die auch mit SET definiert wurden.
Und wenn innerhalb einer FOR-Anweisung Variablen gesetzt UND ausgelesen/manipuliert werden sollen, dann muss zusätzlich mit "setlocal enableDelayedExpansion" gewerkelt werden.
Beispiel/proof-of-concept am CMD-Prompt
C:\Users\Biber>setlocal enabledelayedExpansion & FOR /F "TOKENS=1-8 DELIMS=.;" %A IN ("1234567;24.02.2018;10.03.2018;XY") DO @(set /a jj1=%D-2000) &(Set/a jj2=%G-2000) &@ECHO %A %B %C %JJ1% %E %F %JJ2% %H
18181234567 24 02 18 10 03 18 XY
Im Batch dann optisch auf ein paar Zeilen auseinandergezogen:
@echo off & setlocal enabledelayedExpansion
FOR /F "Skip=1 TOKENS=1-8 DELIMS=.;" %%A IN (Dateiname.csv) DO (
set /a jj1=%%D-2000
Set/a jj2=%%G-2000
ECHO %%A %%B %%C %JJ1% %%E %%F %JJ2% %%H
)
Grüße
Biber