Batch : TXT-Datei auslesen
Hallo,
ich habe eine Textdatei mit dem Inhalt " "Test" ".
Also die zweiten Anführungszeichen sind auch mit in der txt Datei .
Ich möchte diese Datei jetzt über eine Batch Datei auslesen und das Ergebnis als Variable speichern, da sie später noch benutzt wird.
Wenn ich es jetzt aber mit
ausprobiere kommt am Ende als echo nur " " ", also nur ein Anführungszeichen raus, wie kann ich es ändern das der ganze Inhalt wiedergegeben wird?
Mit freundlichen Grüßen
Jan
ich habe eine Textdatei mit dem Inhalt " "Test" ".
Also die zweiten Anführungszeichen sind auch mit in der txt Datei .
Ich möchte diese Datei jetzt über eine Batch Datei auslesen und das Ergebnis als Variable speichern, da sie später noch benutzt wird.
Wenn ich es jetzt aber mit
SET /p name=<C:\Test\TEMP\Datei.txt
echo %name%
ausprobiere kommt am Ende als echo nur " " ", also nur ein Anführungszeichen raus, wie kann ich es ändern das der ganze Inhalt wiedergegeben wird?
Mit freundlichen Grüßen
Jan
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 482027
Url: https://administrator.de/contentid/482027
Ausgedruckt am: 22.11.2024 um 08:11 Uhr
20 Kommentare
Neuester Kommentar
Wie ich in deinem letzten Beitrag (auf den du nicht geantwortet hast) schon mal gesagt habe, das Encoding deiner Textdatei stimmt in dem Fall nicht mit dem der Konsole überein, denn mit einem normalen ANSI File geht das hier problemlos. Also prüfe das Encoding oder steige am besten gleich auf Powershell um.
Bei einer Spalte ist das überflüssiger Overhead ...
[int]$line =3
$csv = import-csv 'C:\stundenzettel\Import\import.csv' -Header "Benutzername","Vorname","Nachname","Abteilung","Personal Nr.","Datum","Hinein","Hinaus","Dienstplan","Dauer","Saldo","Tage","Pause hinein","Pause hinaus","Dauer ohne Pause","Bemerkung","Urlaub" -Delimiter "`t"
$csv[($line - 1)] | select -Expand Nachname | Set-Content 'C:\stundenzettel\TEMP\Test.csv' -Encoding Default
Hallo Newplay123,
ich kann meinen Vorrednern hier nur recht geben - Batch ist hier nicht mehr zeitgemäß. Du machst ja schon irgendwas in PowerShell, dann kannst du auch bei PowerShell bleiben. Was hast du eigentlich konkret vor?
Du importierst eine CSV und exportierst diese wieder? Wählst aber nur eine Spalte davon aus?
Versuch es mal so:
Gruß
Daniel
ich kann meinen Vorrednern hier nur recht geben - Batch ist hier nicht mehr zeitgemäß. Du machst ja schon irgendwas in PowerShell, dann kannst du auch bei PowerShell bleiben. Was hast du eigentlich konkret vor?
Du importierst eine CSV und exportierst diese wieder? Wählst aber nur eine Spalte davon aus?
Versuch es mal so:
Export-CSV -encoding
Gruß
Daniel
dann kommt als echo nur "%Name%"
In dem Fall ist deine Datei leer.Schreib mal das hier in die Batch (nicht in die Konsole! Dort müsstest du aus den doppelten einfach Prozentzeichen machen)
@echo off
for /f "usebackq delims=" %%a in ("C:\stundenzettel\TEMP\Test.csv") do set "Name=%%a"
echo %Name%
Wie gesagt dann ist deine Datei leer.
Wir kennen den Inhalt deiner ursprünglichen CSV Datei nicht, mal wieder Glaskugel polishing ... . Du selektierst da mit Index und wir wissen ja nicht ob der überhaupt korrekt ist mangels Quelldaten!
Es wäre ja so einfach mal Ist Zustand ausführlich in Codetags zu posten stattdessen müssen wir dir alles aus der Nase ziehen . Denn es funktioniert hier ja einwandfrei, also liegt es an deinen Ausgangsdaten.
Wir kennen den Inhalt deiner ursprünglichen CSV Datei nicht, mal wieder Glaskugel polishing ... . Du selektierst da mit Index und wir wissen ja nicht ob der überhaupt korrekt ist mangels Quelldaten!
Es wäre ja so einfach mal Ist Zustand ausführlich in Codetags zu posten stattdessen müssen wir dir alles aus der Nase ziehen . Denn es funktioniert hier ja einwandfrei, also liegt es an deinen Ausgangsdaten.
Die Anzeige in Excel ist Schall und Rauch! Lass es in einem Text-Editor anzeigen der auch unsichtbare Zeichen darstellt wie z.B. Notepad++.
Drittens lass dir das Encoding der Datei in Notepad++ anzeigen
do set name=%%a
Zweitens solltest du richtig kopieren lernen, du hast die Anführungszeichen aus meinem Code nicht mit übernommen.Drittens lass dir das Encoding der Datei in Notepad++ anzeigen
Na da hast du dein Problem.
Warum sind da die "NUL" nach jeden Buchstaben ?
Du hast beim Import mit Import-CSV das Encoding nicht passend auf die Quelldatei definiert Parameter -Encoding!!
Das Encoding dieser kennst wieder nur du. Wir haben die Quelldaten nicht, lade sie in Notepad++ und lass dir das Encoding anzeigen.
Warum sind da die "NUL" nach jeden Buchstaben ?
Das Encoding dieser kennst wieder nur du. Wir haben die Quelldaten nicht, lade sie in Notepad++ und lass dir das Encoding anzeigen.
Wo habe ich Anführungszeichen vergessen ?
Vergleiche mit meiner Zeile oben dann sieht das ein Blinder mit Krückstock!
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
-Encoding
Specifies the encoding for the imported CSV file. The default value is UTF8NoBOM.
The acceptable values for this parameter are as follows:
ASCII: Uses the encoding for the ASCII (7-bit) character set.
BigEndianUnicode: Encodes in UTF-16 format using the big-endian byte order.
OEM: Uses the default encoding for MS-DOS and console programs.
Unicode: Encodes in UTF-16 format using the little-endian byte order.
UTF7: Encodes in UTF-7 format.
UTF8: Encodes in UTF-8 format.
UTF8BOM: Encodes in UTF-8 format with Byte Order Mark (BOM)
UTF8NoBOM: Encodes in UTF-8 format without Byte Order Mark (BOM)
UTF32: Encodes in UTF-32 format.
-Encoding
Specifies the encoding for the imported CSV file. The default value is UTF8NoBOM.
The acceptable values for this parameter are as follows:
ASCII: Uses the encoding for the ASCII (7-bit) character set.
BigEndianUnicode: Encodes in UTF-16 format using the big-endian byte order.
OEM: Uses the default encoding for MS-DOS and console programs.
Unicode: Encodes in UTF-16 format using the little-endian byte order.
UTF7: Encodes in UTF-7 format.
UTF8: Encodes in UTF-8 format.
UTF8BOM: Encodes in UTF-8 format with Byte Order Mark (BOM)
UTF8NoBOM: Encodes in UTF-8 format without Byte Order Mark (BOM)
UTF32: Encodes in UTF-32 format.
Schreib folgendes in die Batch dann ist das extra Powershell-Skript und die extra Ausgabedatei überflüssig
Funktioniert hier mit UCS-2 LE (Vorgänger von UTF-16) einwandfrei.
@echo off
for /f "delims=" %%a in ('powershell -EP Bypass -NoP -C "Import-CSV 'C:\stundenzettel\Import\import.csv' -Delimiter \"`t\" -header 'Benutzername','Vorname','Nachname','Abteilung','Personal Nr.','Datum','Hinein','Hinaus','Dienstplan','Dauer','Saldo','Tage','Pause hinein','Pause hinaus','Dauer ohne Pause','Bemerkung','Urlaub' -Encoding Unicode | select -Index 2 -Expand Nachname"') do set "name=%%a"
echo %name%
du lässt dir auch alles vorkauen oder? Eine kurze Google-Suche hätte dir gesagt das UCS-2 eine Form von UTF-16 ist - dann ein Blick in die Tabelle oben und Überraschung:
Unicode: Encodes in UTF-16 format using the little-endian byte order.
Zitat von @Newplay123:
Ich habe einfach die Haupt Datei das Encoding geändert, so hat es funktioniert.
das ist keine Lösung - das ist ein WorkaroundIch habe einfach die Haupt Datei das Encoding geändert, so hat es funktioniert.