Ausgabe von mehreren Variablen mit for
Hallo Administrator users,
folgendes Problem: ich lese mit Hilfe von listusbdrives und for /f Seriennummern, Label etc. von USB-Sticks aus und übergebe die Variablen. Funktioniert solange ein Stick vorhanden ist. Sind 2 oder mehr Sticks angeschlossen, werden die Inhalte gefunden, jedoch wird nur der letzte Eintrag verwendet. Nun meine Frage: Gibt es eine Möglichkeit beiden Inhalten jeweils eine Variable zuzuordnen?
folgendes Problem: ich lese mit Hilfe von listusbdrives und for /f Seriennummern, Label etc. von USB-Sticks aus und übergebe die Variablen. Funktioniert solange ein Stick vorhanden ist. Sind 2 oder mehr Sticks angeschlossen, werden die Inhalte gefunden, jedoch wird nur der letzte Eintrag verwendet. Nun meine Frage: Gibt es eine Möglichkeit beiden Inhalten jeweils eine Variable zuzuordnen?
for /f "tokens=4" %%a in ('listUsbDrives.exe^|find "USB Serial"') do (
set serial=%%a
)
for /f "tokens=4,5" %%y in ('listUsbDrives.exe^|find "Volume Label"') do (
set Label=%%y
)
echo %serial% %label% >> serials.txt
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 216440
Url: https://administrator.de/contentid/216440
Ausgedruckt am: 25.11.2024 um 12:11 Uhr
7 Kommentare
Neuester Kommentar
Hi,
setz deinen echo-Befehl in die for-Schleife dann sollte es klappen.
Grüße
Exze
<EDIT>
Im Endeffekt also so:
</EDIT>
setz deinen echo-Befehl in die for-Schleife dann sollte es klappen.
Grüße
Exze
<EDIT>
Im Endeffekt also so:
for /f "tokens=4" %%a in ('listUsbDrives.exe^|find "USB Serial"') do (
set serial=%%a
echo %serial% >> serials.txt
)
for /f "tokens=4,5" %%y in ('listUsbDrives.exe^|find "Volume Label"') do (
set Label=%%y
echo %label% >> serials.txt
)
Hi nummer5,
mit meiner modifizierten Version wird jedesmal, wenn dein Script einen weiteren ausliest, der echo Befehl ausgeführt und somit in die Variable und ebenfalls in die Textdatei geschrieben. Nicht nur der letzte.
Grüße
Exze
mit meiner modifizierten Version wird jedesmal, wenn dein Script einen weiteren ausliest, der echo Befehl ausgeführt und somit in die Variable und ebenfalls in die Textdatei geschrieben. Nicht nur der letzte.
Grüße
Exze
Hallo nummer5 und willkommen im Forum!
Solange es nur die beiden genannten Werte sind, sollte sich das etwa so lösen lassen:
Erfasst wird so übrigens nicht nur Token 4, sondern alles nach dem Token 3 ("=") ...
@ Exzellius
Ohne "
... wobei die Zuweisung an die Variablen aber bei Deinem Ansatz ohnehin unterbleiben kann - es würde auch
zum gleichen Ergebnis führen.
Grüße
bastla
Solange es nur die beiden genannten Werte sind, sollte sich das etwa so lösen lassen:
@echo off & setlocal
set "Log=D:\serials.txt"
del "%Log%" 2>nul
for /f "tokens=3*" %%a in ('listUsbDrives^|findstr /c:"USB Serial" /c:"Volume Label"') do (
if not defined Label (set "Label=%%b") else (set "Serial=%%b")
if defined Serial (
setlocal enabledelayedexpansion
>>"%Log%" echo !Serial! !Label!
endlocal
set "Serial="
set "Label="
)
)
@ Exzellius
Ohne "
delayedexpansion
" wird das so nix ...... wobei die Zuweisung an die Variablen aber bei Deinem Ansatz ohnehin unterbleiben kann - es würde auch
for /f "tokens=4" %%a in ('listUsbDrives.exe^|find "USB Serial"') do echo %%a >> serials.txt
for /f "tokens=4" %%y in ('listUsbDrives.exe^|find "Volume Label"') do echo %%y >> serials.txt
Grüße
bastla
moin,
Für die restlichen Variablen ist dieser Snipsel:
Die Kurze Liste wird Ohne Variablen erstellt
Gruß Phil
Für die restlichen Variablen ist dieser Snipsel:
@echo off
setlocal
for %%i in ("D:\CMDtools\ListUsbDrives.exe?" "D:\Downloads\ListUsbDrives.exe?") do call set "path=%%~dpi;%%path%%"
rem Automtisch Header überspringen
for /f "delims=:" %%i in ('listusbdrives ^|findstr /nbc:Warning: /c:"Elevation type" ') do set /a skip=1+%%i
rem Eine USB Auflistung hat jeweils 27 Zeilen [ohne 1st Cluster Align]
set /a List = 27
rem alte Variablen Löschen
for /f "delims==" %%i in ('2^>nul set S_') do set "%%i="
for /f "tokens=1,2*delims=:=" %%i in ('ListUsbDrives^|more +%skip%^|findstr /vb 1 ^|findstr .^|findstr /n .') do (
for /f "tokens=*delims=9" %%L in ('set /a "x=(%%i+List-1)/List+900"') do (
for /f "tokens=*" %%K in ("%%k") do for /f "tokens=1-3" %%A in ("%%j") do set "S_%%L_%%A_%%B_%%C=%%K"
))
echo Liste der Variablen fuer alle USB Laufwerke
set S_
echo(
echo(
call :Auflistung >D:\serials.txt
type D:\serials.txt
exit /b
:Auflistung
setlocal
rem Eintrag der Gleichung für Zeilenumbruch jede x-te Ausgabe
set Suche=/c:"USB Serial" /c:"Volume Label" /c:"USB Friendly" /c:"MountPoint"
for /f %%A in ('^(type nul%suche:/c=^&echo^(%^)^|find /c /v ""') do set "UM=set /a "1/((%%i-1)/%%A-%%i/%%A)" >nul 2>nul&&echo("
echo Kurze Tabelle
for /f "tokens=1,2*delims=:=" %%i in ('D:\Downloads\ListUsbDrives.exe ^|more +%skip% ^|findstr /vb 1 ^|findstr /b %Suche%^|findstr /n .') do @(
<nul set /p "=%%k;") & %UM%
echo(
exit /b
Gruß Phil
Hi bastla,
jo die zusätzlichen Variablen sind unnötig, stimmt ;)
mit "delayedexpansion" kann ich mich nicht anfreunden, weil ich bisher immer wenn ich versuche mich reinzulesen an meine Grenzen stoße ;)
Grüße
Exze
jo die zusätzlichen Variablen sind unnötig, stimmt ;)
mit "delayedexpansion" kann ich mich nicht anfreunden, weil ich bisher immer wenn ich versuche mich reinzulesen an meine Grenzen stoße ;)
Grüße
Exze