BAT / CMD-Datei zum Entfernen von Laufwerksbuchstaben mit DISKPART
Ich versuche, eine Batch-Datei zu schreiben, um Laufwerksbuchstaben zu entfernen, die Partitionen ohne Dateisystem zugewiesen sind. Ich kann wmi nicht verwenden, da es in einer WinPE-Wiederherstellungsumgebung verwendet wird.
DISKPART> list volume
Volume ### Ltr Label Fs Type Size Status Info
---------- --- ----------- ----- ---------- ------- --------- --------
Volume 0 K DVD-ROM 0 B No Media
Volume 1 L DVD-ROM 0 B No Media
Volume 2 C Windows 7 NTFS Partition 80 GB Healthy System
Volume 3 D Partition 500 GB Healthy System
Volume 4 Partition 500 GB Healthy System
Volume 5 E Partition 500 GB Healthy System
DISKPART> exit
For loop = 0 to 5
If Type[loop]="Partition" then
If Ltr[loop]<>"" then
If Fs[loop]="" then
SELECT VOLUME loop
REMOVE LETTER Ltr[loop]
End If
End If
End If
Next
Das ist was ich bisher habe ...
@echo off
For /F "Tokens=1,2,3,4,5,6*" %%I In ('echo.list volume^|diskpart.exe^|findstr /I /R /C:"Volume [0-9]"') Do (
echo %%I %%J %%K %%L %%M %%N
if "%%N"=="Partition" (
if NOT "%%K"=="" (
if "%%M"=="" (
echo mountvol %%K: /D
)
)
)
)
Das oben beschriebene Verfahren funktioniert nicht, da die Ausgabe durch Leerzeichen begrenzt ist und einige leere Spalten die Syntaxanalyse durcheinander bringen.
Ein weiterer Versuch, ich denke, das funktioniert, aber es könnte besser sein
@echo off
cd /d "%~dp0"
for /f "skip=8 tokens=*" %%A in ('echo.list volume && echo.exit^|%windir%\system32\diskpart.exe') do (
echo.%%A ^^| find /I " Partition" >nul && (
for /f "tokens=3 delims= " %%B in ("%%A") do (echo.mountvol %%B: /D)
)
)
pause
exit
Weißt du, warum das oben genannte 2 ^ vor dem | benötigt (Pipe)?
@echo off
for /f "skip=9 tokens=*" %%A in ('echo.list volume^| diskpart') do (
echo."%%A"| find /I " Partition" >nul && (
for /f "tokens=3 delims= " %%B in ("%%A") do (echo.mountvol %%B: /D & mountvol %%B: /D)
)
)
pause
exit
Das obige scheint jetzt zu funktionieren, ich musste das Echo in doppelte Anführungszeichen setzen. "%% A" und dann habe ich die 2 ^ vor der Pipe entfernt.
@echo off
setlocal enableDelayedExpansion
set "validDrives=;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;"
for /f "skip=9 tokens=*" %%A in ('echo.list volume^| diskpart') do (
echo."%%A"| find /I " Partition" >nul && (
for /f "tokens=3 delims= " %%B in ("%%A") do (
if "!validDrives:;%%~B;=!" neq "!validDrives!" (echo.mountvol %%B: /D & mountvol %%B: /D)
)
)
)
pause
exit
Das obige Skript ist mein Arbeitsskript. Ich habe Code hinzugefügt, um den Laufwerksbuchstaben zu überprüfen.
Wenn irgendjemand Vorschläge machen kann, wie man das verbessern kann, dann bitte!
Vielen Dan