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%]