Odzczyt VolumeID do pliku txt

0

Cześć
Mam pytanie, dlaczego ten kod działa na Windows 7, a nie działa na Windows 10
odczyt VolumeID do pliku txt , bardzo proszę o pomoc

@echo off
setlocal enabledelayedexpansion

::
for /f "tokens=2 delims=:(" %%i in ('vol C:') do (
set "VolumeID=%%i"
goto :done
)
:done

echo VolumenID: %VolumeID% > %USERPROFILE%\Desktop\Info_ID.txt

endlocal

0

Może być kilka powodów, dla których może nie działać zgodnie z oczekiwaniami w systemie Windows 10+

  • Uprawnienia:
    W systemie Windows 10 mogą obowiązywać bardziej rygorystyczne ustawienia zabezpieczeń, które mogą uniemożliwiać skryptowi wsadowemu zapisywanie plików na pulpicie lub wykonywanie określonych poleceń bez podwyższonych uprawnień.

Spróbuj uruchomić skrypt wsadowy jako administrator

  • Obsługa błędów:
    Twój skrypt obecnie nie obsługuje błędów.
    Możesz dodać kontrolę błędów, aby upewnić się, że polecenie się powiodło i otrzymano oczekiwane dane wyjściowe.

  • Problemy z zapisywaniem plików :
    Sprawdź, czy nie występują problemy z zapisem w katalogu Desktop. Mogą występować ograniczenia lub ścieżka może być niepoprawna. Sprawdź ścieżkę ręcznie.

  • Zmienne środowiskowe:
    Sprawdź, czy %USERPROFILE% poprawnie rozpoznaje katalog profilu użytkownika w systemie Windows 10. echo %USERPROFILE% Aby to sprawdzić, możesz dodać linię debugowania, tak jak przed końcową linią wyjściową.

Zmodyfikowałem wersja Twojego skryptu z dodanymi liniami debugowania, które pomogą zdiagnozować problem:

@echo off
setlocal enabledelayedexpansion

:: Output the user profile path for debugging
echo User Profile Path: %USERPROFILE%

:: Attempt to get the Volume ID
for /f "tokens=2 delims=:(" %%i in ('vol C:') do (
    set "VolumeID=%%i"
    goto done
)
:done

:: Check if VolumeID was set
if not defined VolumeID (
    echo Failed to obtain Volume ID.
    pause
    exit /b
)

:: Output the Volume ID and write to a file on the desktop
echo VolumeID: %VolumeID%
echo VolumeID: %VolumeID% > "%USERPROFILE%\Desktop\Info_ID.txt"

endlocal

0

bardzo dziękuje za pomoc , ale nadal nie działa
taka jest odpowiedz :

User Profile Path: C:\Users\Danielo
Failed to obtain Volume ID.
Press any key to continue . . .

0

Możliwe, że wynik działania vol C: jest różny między Win 7 i Win 10. Używasz delims=:(, co dla rożnych danych wejściowych może generować różne wyniki.

for /f "tokens=2 delims=:(" %%i in ('vol C:') do (

Na Win10, dla vol C: dostaję:

 Volume in drive C is Windows
 Volume Serial Number is 1234-ABCD

Jeśli jesteś zainteresowany tym 1234-ABCD, to jest ono w linii zawierającej tekst: Volume Serial Number. Spróbuj zmodyfikować skrypt, tak by pobierał 5 token (tokeny oddzielone spacją) z tej linii.
Dlaczego 5ty? Bo jak rozdzielisz tę linię po spacjach to dostaniesz:

Token#1 = Volume
Token#2 = Serial
Token#3 = Number
Token#4 = is
Token#5 = 1234-ABCD

:: Attempt to get the Volume ID
@echo off
for /f "tokens=5" %%a in ('vol C: ^| find "Volume Serial Number"') do set VolumeID=%%a
echo Volume Serial Number is: %VolumeID%

Alternatywnie możesz użyć innego rozdzielenie tokenów (np. literki s ) i usunąć wiodącą spację z drugiego tokena.

Token#1: Volume Serial Number i
Token#2: <spacja>1234-ABCD

@echo off
for /f "tokens=2 delims=s" %%a in ('vol C: ^| find "Volume Serial Number"') do set VolumeID2=%%a
echo Volume Serial Number is: [%VolumeID2%]

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