cosmoh
Goto Top

Textdatei ändert nach Batchbearbeitung Schriftart

Und wieder ich....

Hallo alle zusammen.
Ich habe wieder ein eigenartiges Batch Problem.
Ich lasse mir mit folgendem Befehl in einer Batchdatei eine txt Datei erzeugen:
@echo on & setlocal
set "Datei=test1.txt"  
wmic path CIM_LogicalDevice where "DeviceID like "%%VID_1059%%"" GET DeviceID  > %Datei%  
endlocal

das Ergebnis in der txt sieht dann so aus:
DeviceID                              
USB\VID_1059&PID_0019\03190215003965  
USB\VID_1059&PID_0017\001104184812 

Diese wird durch einem Start Batch aufgerufen. Die erzeugte txt Datei wird dann wieder von dem Start Batch wie folgt weiterverarbeitet:
Um die Anzahl der gefundenen Token zu bekommen
for /f "tokens=1,%OhneCR% delims=:" %%i in ('findstr /n  $ %Datei%') do @(  
	for /l %%a in (%AllCount%) do @if %%i==%%a @echo %%j >> Token%TokenCount%.txt
	)
set /a count=%AllCount%-1

Dann um die "\" aus der Datei zu bekommen (an der Stelle Danke an an die vielen Supporter hier) :
set "Von=^\"  
set "Nach="  
if exist "%TempDatei%" del "%TempDatei%"  
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set "Line=!Line:%Von%=%Nach%!" & >>"%TempDatei%" echo !Line!  
:: move "%TempDatei%" "%DateiNeu%"  
:: 
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine  
move "%TempDatei%" "%DateiNeu%"  
:ProcessLine
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b"  
if not defined L >>"%TempDatei%" echo  
>>"%TempDatei%" echo !L:%Von%=%Nach%!  

was soweit auch ganz gut funktioniert, bis auf die Ausgabe in der temporären Datei die dann so aussieht:

㉄㌺ഺ

Ich versuche die Daten nach dem letzten Backslash "03190215003965" zu extrahieren.
Dies ist die Seriennummer des USB Devices.
Um diese weiterverarbeiten zu können müsste ich die Backslash's wegbekommen da diese als Sonderzeichen in einem
Batchfile zu Fehlern bzw. Nichtverwendbarkeit führen.

Weiß jemand warum da nach dem ersetzen von "\" auf einmal "japanisch" in der Datei steht?
Hat das was mit dem Erzeugen mit WMIC zu tun?

Hat jemand eine Idee wie ich das extrahieren der Seriennummer besser oder einfacher gestallten könnte?


Für Eure Hilfe/Ideen wie immer Danke im Voraus!

Gruß und schon mal viele schöne bunte Eier


Steffen

Content-Key: 563513

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

Printed on: April 26, 2024 at 16:04 o'clock

Mitglied: 143728
143728 Apr 07, 2020 updated at 14:52:58 (UTC)
Goto Top
Das liegt an der Unicode-Ausgabe von wmic.

Ich würde es gleich so all in one machen statt alles immer überflüssigerweise in Textdateien auszulagern ...:
@echo off
for /f "delims=" %%a in ('powershell -EP Bypass -NoP -C "gwmi CIM_LogicalDevice -Filter \"DeviceID like '%%VID_1059%%'\" | %%{$_.DeviceID.split('\')[-1]}"') do echo %%a  
Noch ein Grund endlich auf Powershell umzusteigen face-wink...
Member: rubberman
rubberman Apr 07, 2020 updated at 17:30:00 (UTC)
Goto Top
Geht auch mit wmic ähnlich simpel.
@echo off &setlocal
for /f "delims=" %%i in ('wmic path CIM_LogicalDevice WHERE "DeviceID LIKE 'USB\\VID_1059&%%'" GET DeviceID /value') do for /f %%j in ("%%~nxi") do (  
  ECHO mach was mit %%j
)
pause
Statt noch mal irgendwas in Dateien zu schreiben, arbeitest du anstelle der ECHO Anweisung einfach mit %%j weiter.

Steffen
Member: cosmoH
cosmoH Apr 07, 2020 at 18:05:12 (UTC)
Goto Top
Hallo Cabrinha,

das mit der PowerShell wird leider nix. Die Scripte werden dann mal auf Industrie Rechnern in einer Produktionsumgebung laufen, auf denen keine PowerShell erlaubt.
Zudem sollen die Ergebnisse den späteren Eigentümern auch die Möglichkeit zur Analyse geben, ich habe ja nur Ausschnitte der Scripte gepostet, da gäbe es noch ganz ganz viel mehr, and alles im Rahmen der Kundenumgebung.

Aber Danke für die Möglichkeit, ich schaue mir das auf jeden Fall mal an für eventuell spätere Projekte.

Danke! Gruß Steffen
Member: cosmoH
cosmoH Apr 07, 2020 at 18:08:12 (UTC)
Goto Top
PS, das mit der Unicode Ausgabe habe ich mir schon gedacht, eine Möglichkeit wie man die Text Dateien eventuell nach der Erstellung auf einer einfachen Command Line auf irgendetwas anderes konvertiert/überschreibt weißt Du auch nicht?
Gruß Steffen
Member: cosmoH
cosmoH Apr 07, 2020 at 18:29:25 (UTC)
Goto Top
Hallo Steffen,

Spezialist he????
Das ist eine wirklich geile Variante, ich habe das in der Art auch schon versucht bin aber nie wirklich zum Erfolg gekommen.
Damit ich die Daten erst einmal weiterverwenden kann schreibe ich mir die Seriennummern temporär als Dateinamen auf.
Allerdings verstehe ich noch nicht ganz wie Du hinter den 2. Backslash gekommen bist, da bin ich immer gescheitert.
Ich sehe schon, mit Deinem Wissen bist Du hier vielbeschäftigt aber kannst Du mir einen ganz kleinen Tipp geben wie das mit
dem %%~nxi funktionobelt? Ich stehe da irgendwie auf dem Schlauch, bin aber auch wirklich kein Profi auf dem Gebiet, eher Hobby Halbwissen
Laie vom feinsten.....


Auf jeden Fall Danke für diese Version, die löst einige meiner aktuellen Probleme mit diesem Projekt.

PS schon das 2. mal, wenn Corona durch ist, Du mal zufällig in München bist, gebe ich Dir ein Bier aus !!!

Gruß Steffen
Member: rubberman
rubberman Apr 07, 2020 at 19:13:29 (UTC)
Goto Top
kannst Du mir einen ganz kleinen Tipp geben wie das mit dem %%~nxi funktionobelt?
Führe mal ein FOR /?aus. Da ist das recht gut erklärt. Das ~nx expandiert %%i zu Dateiname und Dateierweiterung. Nun fragst du dich wo du einen Dateipfad hast. Ganz einfach, hast du nicht face-smile Ich missbrauche die Modifikatoren für deinen Zweck, denn ... was ist denn Dateiname und Erweiterung in einem Pfad? Das was hinter dem letzten Backslash folgt. That's it face-wink

Steffen
Member: cosmoH
cosmoH Apr 07, 2020 at 19:27:54 (UTC)
Goto Top
Perfekt, tausend Dank auch für die Erläuterung. Ja, ich glaube mir ist mittlerweile die Fantasie abhanden gekommen, da wäre ich leider nicht drauf gekommen.

Supi, denk an das Bier das ich Dir schulde!

Schönes Osterwochenende

Gruß Steffen
Mitglied: 138701
138701 Apr 27, 2020 at 12:53:04 (UTC)
Goto Top
Und sollte München ausfallen - Wärst du in Köln/Bonn auch herzlich eingeladen!