UPDATE
Я удалил токены = 4, и он начал выводить данные. Это не пропустить мимо петли. Я пропускал слишком далеко впереди с жетонами. Я все еще немного озадачен тем, почему он работает как одна партия, а не из этой партии, но теперь, по крайней мере, я знаю, в чем проблема. Спасибо всем, кто смотрел на это для меня.
Я пишу скрипт для копирования данных с одного компьютера на другой. Проблема в том, что он пропускает сообщение FOR LOOP, которое я звоню из другого абонента FOR LOOP. Если вы тестируете сценарий, ему требуется два компьютера и подключенный диск T: где-нибудь на втором компьютере. Я могу написать сценарий, чтобы он искал внешний диск, если он кому-то полезнее.
FOR /F "tokens=4 skip=1" %%a in ('REG QUERY "%_regshell%" /v "%_regdesktop%"') DO (
SET _dt=%%a
echo robocopy "!_dt!" "!_NetworkDrive!\!_fndesktop!" !_params!
echo attrib -h -r "!_NetworkDrive!\!_fndesktop!"
)
Если я сам напишу выше для цикла LOOP в пакете и просто выведу %% a, то это будет работать без проблем. В этом я вижу, что он действительно вызывает: _backup, но он пропускает непосредственно цикл FOR, и я не уверен, почему. Я писал подобные сценарии много раз, но никогда не имел сценариев, которые полностью игнорировали бы цикл FOR. Кто-нибудь может взглянуть и помочь? Спасибо.
@echo off
:: Set Variables
SET _driveID=T:
SET _params=/Z /E /COPY:DT /R:1 /W:0 /XD LocalService NetworkService temp "temporary internet files" winsxs Content.IE5 cache /XF ntuser.* *.tmp /XJ /FP /NC /NS /NP /NJH
SET _regshell=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
SET _regdesktop=Desktop
:: Set Current Directory
pushd %SystemDrive%\
:: Start Menu - Create Choices and Options. Send to various places to perform the actions.
:_start
cls
ECHO Please type either option 2 or 3 and then press ENTER on the keyboard?
Echo 2. TRANSFER FILES FROM DESKTOP TO LAPTOP
Echo 3. EXIT THE PROGRAM
echo.
set /p choice=Enter Number:
if '%choice%'=='2' goto _desktopToLaptop
if '%choice%'=='3' goto :EOF
echo "%choice%" is not a valid option. Please try again
echo.
goto _start
:: Detect Drive Letters
:_desktopToLaptop
setlocal EnableDelayedExpansion
FOR /F "usebackq skip=1" %%a IN (`WMIC logicaldisk where DeviceID^="%_driveID%" get caption`) DO (
SET _NetworkDrive=%%a
if exist %%a (
CALL :_backup
goto :EOF
) else (
echo.
echo The laptop does not appear to be attached to the computer.
echo.
pause
goto :EOF
)
)
:_backup
:: Detect the folder locations and begin to backup each location to the laptop.
FOR /F "tokens=4 skip=1" %%a in ('REG QUERY "%_regshell%" /v "%_regdesktop%"') DO (
SET _dt=%%a
echo robocopy "!_dt!" "!_NetworkDrive!\!_fndesktop!" !_params!
echo attrib -h -r "!_NetworkDrive!\!_fndesktop!"
)
echo we are past the for loop
pause
:: Return to directory program was run from
popd