komoran12
Goto Top

TXT Datei bleibt nach Erstellung leer - woran liegt es?

Hallo,

ich bin blutiger Anfänger und hoffe, dass mir wer weiterhelfen kann face-smile
Ich habe eine .csv, die wie folgt aufgebaut ist:

Spalte 1;Spalte 2
Wert 1;Wert1a
Wert2;Wert2a

Mit nachfolgendem Batch:

@echo off &setlocal
set "quelle=%userprofile%\Desktop\csv--%Date%.csv"
set "CURRENTTIME=%TIME::=.%"
set "ziel=%userprofile%\Desktop\csv--%Date%.txt"
"%ziel%" (for /f "usebackq skip=1 tokens=1-2 delims=;" %%a in ("%quelle%") DO echo|set /p="%%a;1;")

würde ich gerne folgende .txt Ausgabe erwirken:

Wert 1;1;Wert 2;1

Irgendwie bleibt die TXT leer - kann mir wer sagen, woran es liegt?

BG

Content-Key: 339011

Url: https://administrator.de/contentid/339011

Ausgedruckt am: 19.03.2024 um 07:03 Uhr

Mitglied: BassFishFox
BassFishFox 26.05.2017 aktualisiert um 19:32:43 Uhr
Goto Top
Hallo,

woran liegt es

An z.B. Deinen Syntaxfehlern.

&setlocal
Macht was?
set "quelle=
Die " sind sehr weit nach links gerutscht.

Fuer das Freitagsstudium empfehle ich mal : face-wink
Batch - ein paar Basics die man kennen sollte
https://de.wikibooks.org/wiki/Batch-Programmierung:_Batch-Befehle#SETLOC ...
https://ss64.com/nt/setlocal.html


Schoenes WE!
BFF
Mitglied: 114685
114685 26.05.2017 aktualisiert um 20:13:14 Uhr
Goto Top
Hi,

deine Batch läuft hier einwandfrei ohne Fehler.

Mit welchem OS führst du das aus?
Ich gehe mal davon aus, dass du den Code auch unter xx.bat oder xx.cmd gespeichert hast.

Setze den Code bitte mal in Code-Tags (Linke Symbolreihe, vorletztes Symbol)
Gruß
Mitglied: 114685
114685 26.05.2017 um 20:06:16 Uhr
Goto Top
Hi,

Zitat von @BassFishFox:
An z.B. Deinen Syntaxfehlern.

Ich sehe da keine.


&setlocal
Macht was?

Die CMD-Umgebung lokal nutzen

set "quelle=
Die " sind sehr weit nach links gerutscht.

Nö, die sind richtig.

Gruß
Mitglied: rubberman
rubberman 26.05.2017 um 20:08:08 Uhr
Goto Top
csv--26.05.2017.csv
Spalte 1;Spalte 2
Wert 1;Wert1a
Wert2;Wert2a

*.bat
@echo off &setlocal
set "quelle=%userprofile%\Desktop\csv--%Date%.csv"  
set "ziel=%userprofile%\Desktop\csv--%Date%.txt"  
>"%ziel%" (for /f "usebackq skip=1 delims=;" %%a in ("%quelle%") DO <nul set /p "=%%a;1;")  

csv--26.05.2017.txt
Wert 1;1;Wert2;1;

Grüße
rubberman
Mitglied: 114685
114685 26.05.2017 um 20:11:21 Uhr
Goto Top
Hi,

kriege ich mit seinem Originalcode auch raus. ;)

Gruß
Mitglied: rubberman
rubberman 26.05.2017 aktualisiert um 20:33:36 Uhr
Goto Top
Joa, nichtsdestotrotz ist CURRENTTIME ungenutzt, 2 Tokens zu verarbeiten wo nur eines benötigt wird, macht keinen Sinn und wenn man eine Pipe vermeiden kann (bei der immer beide Seiten in je einem separaten zusätzlichen cmd.exe Prozess ausgeführt werden) sollte man das tun. Ich hatte deinen Kommentar schon vorab gelesen face-wink

Grüße
rubberman
Mitglied: 114685
114685 26.05.2017 um 20:48:35 Uhr
Goto Top
Zitat von @rubberman:
Joa, nichtsdestotrotz ist CURRENTTIME ungenutzt, ...

Noch, mein Guter, noch. face-smile face-smile Die ist schon für zukünftige interessante Ergänzungen vorgesehen.

Willst du dir den Tag versauen,
musst du Frickelcode bauen.


face-monkey
Mitglied: Komoran12
Komoran12 29.05.2017 um 14:54:40 Uhr
Goto Top
Hi rubberman,

jetzt klappt es auch bei mir face-smile Vielen Dank.

Wie kann man hier innerhalb des Batch verursachen, dass es nur ausgeführt wird, wenn die Quell-Datei vorhanden ist?

Zitat von @rubberman:

csv--26.05.2017.csv
Spalte 1;Spalte 2
> Wert 1;Wert1a
> Wert2;Wert2a
> 

*.bat
@echo off &setlocal
> set "quelle=%userprofile%\Desktop\csv--%Date%.csv"  
> set "ziel=%userprofile%\Desktop\csv--%Date%.txt"  
>>"%ziel%" (for /f "usebackq skip=1 delims=;" %%a in ("%quelle%") DO <nul set /p "=%%a;1;")  
> 

csv--26.05.2017.txt
Wert 1;1;Wert2;1;

Grüße
rubberman
Mitglied: 114685
Lösung 114685 29.05.2017 um 15:11:21 Uhr
Goto Top
Hi,


Wie kann man hier innerhalb des Batch verursachen, dass es nur ausgeführt wird, wenn die Quell-Datei vorhanden ist?


Beispielweise
if exist "%Quelle%"  goto :tuwas   
if not exist "%Quelle%"  exit  

Gruß
Mitglied: Komoran12
Komoran12 29.05.2017 um 15:24:52 Uhr
Goto Top
Hi hugonatter,

danke für die flotte Antwort. Meinst Du so?

if exist "%Quelle%"  goto :batch1  
if not exist "%Quelle%"  exit  

:batch1
@echo off &setlocal
set "quelle=%userprofile%\Desktop\csv--%Date%.csv"  
set "ziel=%userprofile%\Desktop\csv--%Date%.txt"  
>"%ziel%" (for /f "usebackq skip=1 delims=;" %%a in ("%quelle%") DO <nul set /p "=%%a;1;")  
Mitglied: 114685
Lösung 114685 29.05.2017 aktualisiert um 15:39:14 Uhr
Goto Top
Ja. face-smile
In Zeile 2 reicht ein Exit oder goto :eof, das beendet die Batchdatei ebenfalls. Das if not exist kannst du dir in dem Fall sparen, da das Programm sowieso dort landet, da ja die Zeile 1 nicht zutrifft.
Alternativ nur in die erste Zeile
if not exist "%Quelle%" goto :EOF  
schreiben, dann kann Zeile 2 entfallen.

Gruß
Mitglied: Komoran12
Komoran12 29.05.2017 um 15:39:50 Uhr
Goto Top
Ich danke Dir! face-smile
Für die Powershell-Freunde unter uns, wie würde das da aussehen?
Mitglied: 114685
114685 29.05.2017 um 15:41:43 Uhr
Goto Top
Ich wollte noch was nachtragen, das ging aber nicht mehr:

Du musst natürlich die Definition von Quelle vornehmen, bevor du überprüfst, ob sie auch vorhanden ist, sonst wird das nichts. face-smile
Mitglied: colinardo
Lösung colinardo 29.05.2017 um 15:59:33 Uhr
Goto Top
Servus.
Zitat von @Komoran12:
Für die Powershell-Freunde unter uns, wie würde das da aussehen?
$arr = @()
(Import-CSV 'c:\quelle.csv' -delimiter ";") | %{$arr += $_.'Spalte 1' + ';1'}  
($arr -join ';') | sc 'c:\ziel.txt'  
Grüße Uwe