Você pode corrigir seu código simplesmente colocando um delimitador entre os dois números em seus nomes de variáveis finais. Usarei um período:
SET !A!.!B!=!%%G!
ECHO !A!.!B! Has Data !%%G!
Ou você pode colocar um prefixo antes de cada nome. Essa é uma boa ideia porque você não pode expandir um nome de variável que começa com um dígito com expansão normal porque ele será confundido com um argumento em lote como %1
. Não é um problema com seu código, já que você usa a expansão atrasada. Mas as variáveis que começam com um dígito geralmente são evitadas.
SET V!A!!B!=!%%G!
ECHO V!A!!B! Has Data !%%G!
Eu provavelmente faria as duas coisas. Eu gosto da variável começando com algo diferente de um dígito, e visualmente eu gosto da separação dos dois números:
SET V!A!.!B!=!%%G!
ECHO V!A!.!B! Has Data !%%G!
Seu código pode ser simplificado drasticamente:
@echo off
setlocal enableDelayedExpansion
set /a count=0
for /f %%A in ('mountvol ^| findstr /l "\ *"') do (
set /a "A=count/2+1, B=count%%2+1, count+=1"
set "V!A!.!B!=%%A"
echo V!A!.!B!=%%A
)
Qual deve render:
V1.1 Has Data \?\Volume{d35e9775-0176-11d6-a06d-806e6f6e6963}\
V1.2 Has Data H:\
V2.1 Has Data \?\Volume{d35e9776-0176-11d6-a06d-806e6f6e6963}\
V2.2 Has Data F:\
V3.1 Has Data \?\Volume{6537febd-01bc-11d6-adb5-806e6f6e6963}\
V3.2 Has Data ***
V4.1 Has Data \?\Volume{3fb54500-a257-11e4-8d8d-806e6f6e6963}\
V4.2 Has Data ***
V5.1 Has Data \?\Volume{6537febe-01bc-11d6-adb5-806e6f6e6963}\
V5.2 Has Data C:\
V6.1 Has Data \?\Volume{6537fec3-01bc-11d6-adb5-806e6f6e6963}\
V6.2 Has Data A:\
V7.1 Has Data \?\Volume{6537fec1-01bc-11d6-adb5-806e6f6e6963}\
V7.2 Has Data D:\
V8.1 Has Data \?\Volume{6537fec2-01bc-11d6-adb5-806e6f6e6963}\
V8.2 Has Data E:\
Ao simplificar o código para usar apenas um loop, sem variáveis intermediárias, tecnicamente não há necessidade de um prefixo ou delimitador no nome da variável. Você poderia simplesmente usar o seguinte no meu loop:
set "!A!!B!=%%A"
echo !A!!B! Has Data %%A
Mas ainda manteria o prefixo e o delimitador.
Pode haver 10 ou mais volumes em uma máquina - o meu tem 10. Como Scott sugere, você pode adicionar 100 ao valor para obter um nome de variável de largura fixa que suporte até 99 volumes. Eu também usaria uma operação de substring para obter valores zero pré-fixados, começando com 01
.
@echo off
setlocal enableDelayedExpansion
set /a count=0
for /f %%A in ('mountvol ^| findstr /l "\ *"') do (
set /a "A=count/2+101, B=count%%2+1, count+=1"
set "V!A:~-2!.!B!=%%A"
echo V!A:~-2!.!B!=%%A
)