Kleine Frage zu batch!

pccc

Fleet Captain Special
Mitglied seit
03.01.2007
Beiträge
337
Renomée
0
heyho,

ich brauche die DeviceID einer Festplatte anhand Ihrer Größe. Habe dazu folgendes gefunden:

Code:
wmic partition where numberofblocks=XXXXXX get deviceid

wobei man die NumberOfBlocks auslesen kann zu jeder angeschlossenen HDD:

Code:
wmic partition get Description,DeviceID,Name,numberofblocks

Leider erhalte ich nach Eingabe des 1. Commands folgendes:

Code:
DeviceID
Disk #X, Partition #Y

Wie kann ich nun die Zahl nach dem ersten "#" erhalten (also das "X") und diese in einem weiteren Batchkommando wie z.B.:

"c:\prog.exe -v $var"

verwenden, wobei $var dann eben mit der "Zahl" X ersetzt werden soll?

Danke!
 
Für den Fall, dass die Ausgabe immer identisch ist, kann man das mit einer for-Schleife lösen:
Code:
for /F "skip=1,tokens=2" %%i IN (befehl_mit_ausgabe) DO (
    set disk=%%i
)
Erklärung:
  • skip=1: eine führende Zeile der Ausgabe ignorieren
  • tokens=2: das zweite Objekt, das mit Leerzeichen/Tabs getrennt wurde, ist das gewünschte

Für den Fall, dass die Ausgabe nicht immer gleich aussieht/formatiert ist, müsste man mit etwas mehr Aufwand rechnen.

MfG Dalai
 
Erstmal vielen Dank. Habe folgeneds versucht:

Code:
for /F "skip=1,tokens=2" %%i IN ("wmic partition where numberofblocks=640752525 get deviceid") DO (
    set disk=%%i
)

bzw auch einmal ohne die Anführungszeichen um den wmic Befehl in der IN-Klammer.

Code:
wmic partition where numberofblocks=640752525 get deviceid
gibt ja wie gesagt:

DeviceID
Disk #5, Partition #1

zurück.

Leider funktioniert der obige Code nicht (habs in bat.bat auf dem Desktop gespeichert):

Code:
C:\Dokumente und Einstellungen\XXXX\Desktop>bat.bat
C:\Dokumente und Einstellungen\XXXX\Desktop>for /F "skip=1,tokens=2" %i IN ("
wmic partition where numberofblocks=640752525 get deviceid") DO (set disk=%i )
",tokens=2"" ist syntaktisch an dieser Stelle nicht verarbeitbar.

?! Danke schonmal!

Edit: Wenn ich "skip=1,tokens=2" in "skip=1 tokens=2" ändere, so erhalte ich keinen Syntaxfehler, aber der Befehl wird einfach so auf der Konsole ausgegeben... :(

Edit: Da ich nun eine andere Möglichkeit gefunden habe, TrueCrypt Container zu mounten (Direkt über die Volume-ID), brauche ich das zwar nicht mehr zwingend. Aber trotzdem würde mich noch interessieren, was falsch ist :-)
 
Zuletzt bearbeitet:
Sorry, da hab ich ein paar Sachen vermurkst :-[. Das Komma muss tatsächlich durch ein Leerzeichen ersetzt werden und zum Anderen muss der Befehl wmic ... in einfachen Anführungszeichen stehen (und zwar auf einer Zeile!).

So sollte das funktionieren:
Code:
for /F "skip=1 tokens=2" %%i IN ('wmic partition where numberofblocks=640752525 get deviceid') DO (
    set disk=%%i
)

MfG Dalai
 
Danke erstmal, nun kommt:

Code:
C:\Dokumente und Einstellungen\xyz\Desktop>for /F "skip=1 tokens=2" %i IN ('
wmic partition where numberofblocks 640752525 get deviceid') DO (set disk=%i )
640752525 - Ungültiges Aliasverb.
 
Das ist aber die Ausgabe von deinem Befehl, dafür kann die for-Schleife nix. Wie die Parameter für wmic sind, kann ich dir nicht sagen.

MfG Dalai
 
Zurück
Oben Unten