Когда я впервые начал пытаться построить это, чтобы сохранить внешний файл, содержащий переменные для IP-адресов, чтобы мне приходилось редактировать только один список, я чувствовал, что что-то не так делаю.Но тогда это сработало.Однако он также вывел The system cannot find the drive specified
между «IP» и «Name». это прекратилось, когда я изменил ::
на rem
, (код обновлен)
Я намерен основывать на этом много автоматического развертывания и обслуживания,при обращении к серверам, например, pscp / plink (PuTTY), и при записи в файлы журнала, например, Deploying on [name] xxxx
.Это надежный / подходящий способ написания этого кода?Мне это кажется странно чистым.
Могу ли я проверить: использует ли !xxx!
отложенное расширение?Если это так, следует ли вам всегда заключать переменные в !
для отложенного расширения?(Я прочитал Пакетные файлы Windows: что такое расширение переменных и что означает EnableDelayedExpansion? , но мне не на 100% ясно, что именно это вызывает !
.)
Как это называется?Использую ли я значение переменной в качестве имени переменной, и есть ли для этого компьютерная фраза?Это eval?
@echo off
setlocal EnableDelayedExpansion
set ips[0]=192.168.0.1
set 192.168.0.1=router
set ips[1]=192.168.0.2
set 192.168.0.2=printer
set ips[2]=192.168.0.3
set 192.168.0.3=nas
for /F "tokens=2 delims==" %%a in ('set ips[') do (
rem the next line outputs the IP as it is evaluating the dynamic
rem variable being temp created with the for loop
echo IP is %%a
rem with delayed expansion set (see top) we can use the value
rem of the IP that is being used with the for loop
rem and further lookup by essentially evaluating again
echo Name of IP is !%%a!
)
pause
РЕЗУЛЬТАТ:
IP is 192.168.0.1
Name of IP is router
IP is 192.168.0.2
Name of IP is printer
IP is 192.168.0.3
Name of IP is nas
Press any key to continue . . .
Вставка массива IP во внешний файл
Итак, продолжая редактировать код (правки отражены выше), яТеперь попробуйте переместить массив IP во внешний файл и вызвать его, и он выдаст Environment variable ips[ not defined
demo.bat:
@echo off
setlocal EnableDelayedExpansion
call info_IPs.bat
for /F "tokens=2 delims==" %%a in ('set ips[') do (
rem the next line outputs the IP as it is evaluating the dynamic
rem variable being temp created with the for loop
echo IP is %%a
rem with delayed expansion set (see top) we can use the value
rem of the IP that is being used with the for loop
rem and further lookup by essentially evaluating again
echo Name of IP is !%%a!
)
pause
info_IPs.bat:
@echo off
setlocal EnableDelayedExpansion
set ips[0]=192.168.0.1
set 192.168.0.1=router
set ips[1]=192.168.0.2
set 192.168.0.2=printer
set ips[2]=192.168.0.3
set 192.168.0.3=nas