Per .bat oder .vbs 2 Spalten mit jeweils gleichem inhalt in eine vorhande csv Datei einfügen
Hi@all
Ich habe folgendes Problem:
ich benötige ein Script, das in eine vorhandene Datei 2 Spalten einfügt und diese mit einem Bestimmten Wert füllt.
Leider habe ich von der Programiersprache nur Newbiekenntnisse.
die Suche hat mich auch nicht wirklich weitergebracht.
ich habe eine .txt date mit Semikolon getrennt, bei der ich in jeder Zeile zwei spalten einfügen möchte die mit dem gleichen Werten gefüllt werden.
Beispiel:
SpalteA;SpalteB;SpalteC;SpalteD;
test1;test2;test3;
test4;test5;test6;
jetzt möchte ich vor Spalte A noch zwei weitere Spalten eingefügt haben die dann Lauten Name1;Name2;
Name1 und Name2 soll in allen Zeilen derselbe bleiben.
'Wäre super wenn mir da jemand helfen könnte.
Idealerweise auch mir erklärung des scriptes, damit ich auch was lernen kann
Ich habe folgendes Problem:
ich benötige ein Script, das in eine vorhandene Datei 2 Spalten einfügt und diese mit einem Bestimmten Wert füllt.
Leider habe ich von der Programiersprache nur Newbiekenntnisse.
die Suche hat mich auch nicht wirklich weitergebracht.
ich habe eine .txt date mit Semikolon getrennt, bei der ich in jeder Zeile zwei spalten einfügen möchte die mit dem gleichen Werten gefüllt werden.
Beispiel:
SpalteA;SpalteB;SpalteC;SpalteD;
test1;test2;test3;
test4;test5;test6;
jetzt möchte ich vor Spalte A noch zwei weitere Spalten eingefügt haben die dann Lauten Name1;Name2;
Name1 und Name2 soll in allen Zeilen derselbe bleiben.
'Wäre super wenn mir da jemand helfen könnte.
Idealerweise auch mir erklärung des scriptes, damit ich auch was lernen kann
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 143969
Url: https://administrator.de/forum/per-bat-oder-vbs-2-spalten-mit-jeweils-gleichem-inhalt-in-eine-vorhande-csv-datei-einfuegen-143969.html
Ausgedruckt am: 22.12.2024 um 20:12 Uhr
17 Kommentare
Neuester Kommentar
Servus,
das sollte man relativ einfach mit den suchwörtern csv suchen ersetzen hier finden können.
Für eine einzelne .txt wird sich keiner die Mühe machen ein script zu schreiben, sondern:
Ist bedeutend einfacher, sauberer (denn auch scripte machen nur das, was Sie sollen) und ressourcenschonender für alle
Gruß
das sollte man relativ einfach mit den suchwörtern csv suchen ersetzen hier finden können.
Für eine einzelne .txt wird sich keiner die Mühe machen ein script zu schreiben, sondern:
- diese txt in Excel importieren
- die beiden Spalten dazumachen
- mit einem Autowert füllen
- als .txt exportieren
Ist bedeutend einfacher, sauberer (denn auch scripte machen nur das, was Sie sollen) und ressourcenschonender für alle
Gruß
Das kannst du doch alles mit nem Makro machen.
Erstell dir einfach eine Makro.xls.
Dann machst du ein Makro und nennst es Auto_open. Dadurch wird das Makro direkt gestartet sobald du die XLS aufrufst.
Mit dem Makro kannst du dann deine txt öffnen, einlesen,....
Dann kannst du mit dem Makro Speichern unter machen und die Arbeitsmappe und Excel wieder schließen lassen mit close.
Alles voll automatisch. Du musst dann nur deine XLS andrücken und der Rest geht automatisch.
Erstell dir einfach eine Makro.xls.
Dann machst du ein Makro und nennst es Auto_open. Dadurch wird das Makro direkt gestartet sobald du die XLS aufrufst.
Mit dem Makro kannst du dann deine txt öffnen, einlesen,....
Dann kannst du mit dem Makro Speichern unter machen und die Arbeitsmappe und Excel wieder schließen lassen mit close.
Alles voll automatisch. Du musst dann nur deine XLS andrücken und der Rest geht automatisch.
Moin Addison,
ich weiss jetzt nicht, warum die Jungs & Mädels dir nun unbedingt eine turbodynamische Dreigang-Sensitiv-Automatik andrehen wollen.
Demo am CMD-Prompt:
Das Ergebnis wird jetzt ja auf den Bildschirm ausgegeben.
--> also sollte noch ans Ende der Zeile ein Umleitungsbefehl wie z.B. >X:\ErweiterteDateien\NeueAddison.csv
Als Batchvariante wären zwei Prozentzeichen statt eines vonnöten bei der Laufvariablen %i.
Grüße
Biber
ich weiss jetzt nicht, warum die Jungs & Mädels dir nun unbedingt eine turbodynamische Dreigang-Sensitiv-Automatik andrehen wollen.
Demo am CMD-Prompt:
> rem Originaldatei
>for /f "delims=" %i in (e:\schnipsel\addison.csv) do @echo %i
SpalteA;SpalteB;SpalteC;SpalteD;
test1;test2;test3;
test4;test5;test6;
> REM Zwei konstante neue "Spalten" dazugemogelt.
>for /f "delims=" %i in (e:\schnipsel\addison.csv) do @echo Name1;Name2;%i
Name1;Name2;SpalteA;SpalteB;SpalteC;SpalteD;
Name1;Name2;test1;test2;test3;
Name1;Name2;test4;test5;test6;
Das Ergebnis wird jetzt ja auf den Bildschirm ausgegeben.
--> also sollte noch ans Ende der Zeile ein Umleitungsbefehl wie z.B. >X:\ErweiterteDateien\NeueAddison.csv
Als Batchvariante wären zwei Prozentzeichen statt eines vonnöten bei der Laufvariablen %i.
Grüße
Biber
Zitat von @Biber:
Moin Addison,
ich weiss jetzt nicht, warum die Jungs & Mädels dir nun unbedingt eine turbodynamische Dreigang-Sensitiv-Automatik
andrehen wollen.
Moin Addison,
ich weiss jetzt nicht, warum die Jungs & Mädels dir nun unbedingt eine turbodynamische Dreigang-Sensitiv-Automatik
andrehen wollen.
Salü Biber,
weil es einfacher ist
Ok "Noch" einfacher ists natürlich sich den bequemen, schreib mal und schreibs dann bitte auch so, dass ich was lerne Vollautomatikkurs zu wählen
Grüße
Biber
Biber
zurück
"entspann" dich mal
ich hab nur das "Problem" dass ich nebenbei auch arbeite und mit einer Zeile die da sinnngemäß lautet:
Ich hab eine .txt möglicherweise etwas anderes interpretiert habe, das du gemeint hast.
aber gesucht habe ich schon eine Menge
Naja aber bestimmt nicht hier mit den oben von mir genannten Suchwörtern Es gab mal eine Zeit, da wurden unsere fleissigen Biber & Bastla tagtäglich mit immer den gleichen "such mir was und ersetze es" vollgeschrieben ;-(
ich habe nur leider nicht die Programierkenntnisse die ich hierfür bräuchte.
Nungut, aber die häts ja mit dem suchen auch nicht gebraucht
Aber es gibt ja zum Glück Leute die Hilfreich sind.
Bin ich eigentlich üblicherweise auch, aber manchmal kommt einem die eigene Arbeit dazwischen.
Und auch Biber hat dir einen Bärendienst erwiesen - denn ohne eine Abfrage, ob denn diese .txt bereits die zusätzlichen Werte hat und in dem Fall nix zu tun ist - würde ich das nicht machen
ich will kein fertiges Script, es reicht mir wenn ich Tipps bekomme mit welchen Behfehlen ich das hinbekomme.
Gib mal:
find /?
sowohl in der Dosbox, als auch hier in der Suche ein.
Gruß
Zitat von @60730:
Gib mal:
find /?
sowohl in der Dosbox, als auch hier in der Suche ein.
Hallo @ All,Gib mal:
find /?
sowohl in der Dosbox, als auch hier in der Suche ein.
Da "DosBox" ja inzwischen als 3rd Party Programm existiert, würde ich eine Bezeichnung "Eingabeaufforderung", "Console" oder "CMD-Shell" dem eher unprofessionellen DosBox vorziehen
Konkret wäre hier, das ja auch nur eine der neuen Spalten vorhanden sein könnte, findstr geeigneter.
Echo off
:: Dateiname zum Erweitern per Parameter übergeben
Set "InFile=%~1"
:: Neuer Dateiname mit angehängtem _X
Set "OutFile=%~dpn1_X%~x1"
:: Erste Zeile (Header) Einlesen
Set /P Header=<"%InFile%"
:: Prüfen ob neue Spalten schon im Header vorhanden, wenn ja Hinweis und Exit
Echo %Header%|Findstr /i "Name1 Name2" >NUL 2>&1 && (Echo Spalten schon da&Exit /B 1)
:: Neue Datei zurücksetzen
Type NUL >"%OutFile%"
:: Allen Zeilen neue Spalten voranstellen
for /f "usebackq delims=" %%A in ("%InFile%") do >>"%OutFile%" Echo Name1;Name2;%%A
:: Testausgabe alte und neue Datei
type "%InFile%" "%OutFile%"
Gruß
LotPings
Edit: PS: Für nicht im Programmieren bewanderte wäre ein Programm wie CSV-Editor noch zu empfehlen.
Zitat von @77559:
Da "DosBox" ja inzwischen als 3rd Party Programm existiert, würde ich eine Bezeichnung "Eingabeaufforderung", "Console" oder "CMD-Shell" dem eher unprofessionellen DosBox vorziehen
Da "DosBox" ja inzwischen als 3rd Party Programm existiert, würde ich eine Bezeichnung "Eingabeaufforderung", "Console" oder "CMD-Shell" dem eher unprofessionellen DosBox vorziehen
[OT]
naa gut, aber ich nenne trotzdem immer noch so, auch wenn irgendwann einer der beiden Klitsch Kos ne Bude aufmacht und die so nennt - mir egal
Nö - der ist auch für im
[/OT]
Ob nun find oder findstr ist in dem fall doch Jacke wie Hose
Moin Addison,
auch wenn schon alles "gelöst" ist, noch eine Ergänzung zum Neuerstellen/Anfügen mot den Pipes ">" und ">>".
Bei der ">>"-Variante, die du jetzt (noch zu deiner Zufriedenheit) verwendest, werden neue Zeilen an eine vorhandene Datei dieses Namens angehängt.
Okay, natürlich nur dann, wenn denn bereits eine existiert - sonst wird eine eine neue erstellt.
Falls du aber in deinem Szenario aus Versehen deinen Oneliner 2x startest, dann hast du bei 100 Original-Zeilen dann 200 mutierte Zeilen in deiner neuen Textdatei.
Deshalb würde ich schon die ">" [=Neuerstellen] statt ">>" [=Anfügen]-Pipe verwenden.
Alledings soll sich die ">"-Pipe ja auf das Ergebnis der gesamten FOR-Anweisung beziehen, also musst du das auch dadurch deutlich machen, dass du die ganze FOR-Anweisung [quasi als Gesamtkunstwerk ] in Klammern setzt.
Demo:
<code plain>
Name1;Name2;test1;test2;test3;
Name1;Name2;test4;test5;test6;
(=10:32:00 D:\temp=)
(=10:32:46 D:\temp=)
Name1;Name2;test1;test2;test3;
Name1;Name2;test4;test5;test6;
Grüße
Biber
auch wenn schon alles "gelöst" ist, noch eine Ergänzung zum Neuerstellen/Anfügen mot den Pipes ">" und ">>".
Bei der ">>"-Variante, die du jetzt (noch zu deiner Zufriedenheit) verwendest, werden neue Zeilen an eine vorhandene Datei dieses Namens angehängt.
Okay, natürlich nur dann, wenn denn bereits eine existiert - sonst wird eine eine neue erstellt.
Falls du aber in deinem Szenario aus Versehen deinen Oneliner 2x startest, dann hast du bei 100 Original-Zeilen dann 200 mutierte Zeilen in deiner neuen Textdatei.
Deshalb würde ich schon die ">" [=Neuerstellen] statt ">>" [=Anfügen]-Pipe verwenden.
Alledings soll sich die ">"-Pipe ja auf das Ergebnis der gesamten FOR-Anweisung beziehen, also musst du das auch dadurch deutlich machen, dass du die ganze FOR-Anweisung [quasi als Gesamtkunstwerk ] in Klammern setzt.
Demo:
<code plain>
for /f "delims=" %i in (e:\schnipsel\addison.csv) do @echo Name1;Name2;%i
Name1;Name2;SpalteA;SpalteB;SpalteC;SpalteD;Name1;Name2;test1;test2;test3;
Name1;Name2;test4;test5;test6;
(=10:32:00 D:\temp=)
(for /f "delims=" %i in (e:\schnipsel\addison.csv) do @echo Name1;Name2;%i) >AddisonNeu.csv
(=10:32:46 D:\temp=)
type AddisonNeu.csv
Name1;Name2;SpalteA;SpalteB;SpalteC;SpalteD;Name1;Name2;test1;test2;test3;
Name1;Name2;test4;test5;test6;
Grüße
Biber
Zitat von @60730:
Hab das erst jetzt registriert,Ob nun find oder findstr ist in dem fall doch Jacke wie Hose
nicht ganz, bei der Oder-Abfrage von zwei Begriffen kommt einem da "findstr.exe" by default sehr entgegen.Gruß
LotPings