3
我正在嘗試編寫一個批處理文件來刪除分配給沒有文件系統的分區的驅動器號。我無法使用wmi,因爲它在WinPE恢復環境中使用。使用DISKPART刪除驅動器號的BAT/CMD文件
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
這是我迄今爲止...
@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
)
)
)
)
上述不起作用,因爲輸出是分隔空間和一些空白列搞亂了解析。
的另一種嘗試,我想這樣的作品,但它可能是更好的
@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
你知道爲什麼上面需要2 ^前| (管)?上述
@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
似乎是現在的工作,我不得不把周圍的回聲雙引號。「%% A」,然後我管之前取出的2 ^。
@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
以上是我的工作腳本,我添加了一些代碼來驗證驅動器號。
如果有人可以提供有關如何改善這個問題的建議,那麼請做!
謝謝
他從來沒有說過。他遵循堆棧溢出的規則。 – Jahwi
您是否使用NTFS以外的其他文件系統?如果只使用NTFS,它將簡化腳本。 – foxidrive