ukrywanie czesci wiadomości polecenia diskpart

0

Witam.
Napisałem prosty skrypt do przygotowanie wybranego dysku twardego dla VirtualBoxa.
Wszystko działa sprawni tylko chciałbym aby nie wyświetlało mi się to co jest zaznaczone na obrazku. Jakieś sugestie?

Pierwszy raz używam tego języka i chciałbym się dowiedzieć czym konkretnie jest "|" pomiędzy diskpart a blokiem (znalazłem to w sieci ale nie wiem na jakiej zasadzie to działa) czasem tez widuje "^|".
Dodatkowo chciałbym też jakoś zapisać numer wybranego dysku, i kiedy skończę pracę w VB to żeby inny skrypt bez ponownego wybierania dysku przywracał go w tryb online.

user image

@echo off
( 
 echo list disk
 echo exit
) | diskpart

set /p disk=Wpisz numer dysku:
set curdir=%~dp0
set filename=yyy.vmdk
set vmdk=%curdir%%filename%

echo Przygotowywanie dysku twardego
( 
 echo select disk %disk%
 echo offline disk
 echo ATTRIBUTES DISK CLEAR READONLY
 echo exit
) | diskpart >nul
REM pause
del "%vmdk%"
echo Tworzenie wirtualnego dysku
"C:\Program Files\Oracle\VirtualBox\VBoxManage" internalcommands createrawvmdk -filename "%vmdk%" -rawdisk \\.\PhysicalDrive%disk% >nul
"C:\Program Files\Oracle\VirtualBox\VBoxManage" internalcommands sethduuid "%vmdk%" 01234567-89ab-cdef-0123-456789abcdef >nul
echo Uruchamianie wirtualnej maszyny
REM "%curdir%RAW.vbox"
1

batch jest strasznie oporny do takich modyfikacji
możesz się posłużyć for z przełącznikiem /f ma bardzo duże możliwości ale jest strasznie toporny

możesz zapisać wynik do pliku >plik.txt
potem za pomocą for przeiterować po liniach:

( 
 echo list disk
 echo exit
) | diskpart > plik.txt

FOR /F "skip=5 tokens=*" %%i IN (plik.txt) DO (
    IF NOT "%%i"=="DISKPART> " (
    IF NOT "%%i"=="Leaving DiskPart..." (
        echo %%i
    ))
)

możesz też nie zapisywać wyniku do innego pliku, ale wtedy potrzebujesz wydzielić pierwszą instrukcję do osobnego batcha a potem użyć tego batcha w apostrofach dodając flagę usebackq

1

| to pipe - przekierowuje to z lewej strony na wejście tego z prawej
^ to znak ucieczki, powoduje że ^| zostanie zinterpretowane jako zwyczajny znak |

ogólnie polecam zapoznać się z windows powershell - ma dużo większe możliwości

1

zapisać wybór możesz na przykład:

echo %disk%>wybor.cfg

odtworzenie można zrobić na przykład w ten sposób:

set /p wybor= <wybor.cfg

jeśli chcesz zapamiętać więcej danych to za pomocą for /f możesz nawet zaimplementować plik .ini ze słownikiem klucz/wartość

2

jednak da się to zapisać bez oddzielnego batcha, używając właśnie znaku ucieczki:

FOR /F "usebackq skip=5 tokens=*" %%i IN (`(echo list disk ^& echo exit^) ^| diskpart`) DO (
    IF NOT "%%i"=="DISKPART> " (
    IF NOT "%%i"=="Leaving DiskPart..." (
        echo %%i
    ))
)
0

Dzięki, wszystko działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1