Я борюсь с командным файлом Windows, который будет запускаться на сервере SERVER через определенные промежутки времени и будет оценивать все компьютеры в сети, а затем извлекать новые и измененные файлы на резервное устройство NAS.Для такого подхода я решил использовать только 1 сценарий для поддержки 150 резервных копий на 150 компьютерах.
У меня проблема в том, что мне нужно извлечь имя компьютера, которое я храню в файле .txt как:
Имя: computername.domain.name на чистое имя компьютера:
computername.domain.name
Я сделал это, потянув .txtсодержимое файла в VARIABLE, затем я убираю первые 9 символов в подпрограмме SUB : SUBfound :
setlocal enabledelayedexpansion
for /L %%i in (0,1,255) do (call :SUBscan 192.168.79.%%i)
:SUBscan ip
echo|set /p dummyOutput="Scanning %1 ... "
ping -n 1 -w 200 -4 %1 >nul
if %ERRORLEVEL% NEQ 0 (echo not a computer) else (
if exist "\\%1\d$\DataFolder\" (call :SUBfound %1) else (call :SUBnotfound %1)
)
EXIT /B
:SUBfound
set targetname=<backup_id.txt
set "targetname=!targetname:~9!"
...other code
EXIT /B
Но имя цели в: SUBfound не оценивает:
echo !targetname! --> echoes me:~9!
echo %targetname% --> echoes !targetname!
Я знаю, что должно быть что-то не так с оценкой переменных SET в подпрограммах, но не могу понять это.