Почему мой пакетный файл Windows продолжает зацикливаться после выполнения условия?

По сути, я хочу скопировать последнюю версию MSI с сервера на свой локальный компьютер. Я пытаюсь просмотреть файл и захватить первую строку, содержащую последнюю версию MSI для захвата. Я не совсем знаком со странностями циклов for и операторов if в пакетных файлах. Вот код, который у меня есть, который продолжает зацикливаться после того, как находит первую строку:

cd %~dp0

mkdir "c:\MyApp\QA\msi"

rem Determine what folder is the latest version of QA
setlocal enabledelayedexpansion
dir /b /o-n "\\my-server\folder\another_folder\5.0.*" > output.txt
SET /a counter=1
SET version=""
for /f "usebackq delims=" %%a in (output.txt) do (
if "counter"==1 goto install (
xcopy "\\my-server\folder\another_folder\%%a\myinstaller.msi" "c:\MyApp\QA\msi\myinstaller.msi" /y
)
SET /a counter+=1
)

goto exit

:exit

PAUSE

person Brian T Hannan    schedule 13.07.2011    source источник


Ответы (1)


В этой строке:

if "counter"==1 goto install (

"counter" никогда не может быть равно 1. С другой стороны, !counter! может.

Пояснение (если нужно):

"counter" — это литерал, слово счетчик в двойных кавычках. Вы сравниваете его с другим литералом, 1. Очевидно, что они не совпадают. Скорее всего, в этой части скрипта имеется в виду оценка переменной counter и сравнение значения с 1. В командных блоках в квадратных скобках обычно используется отложенное расширение, поэтому !counter! (в отличие от %counter%).

С другой стороны, указанная линия кажется несколько необычной. Он содержит команду goto и другую команду после нее. Я не думаю, что команда, следующая за goto, скорее всего, будет выполнена. Возможно, goto install избыточен.

person Andriy M    schedule 13.07.2011
comment
Большое спасибо! Я определенно делал это неправильно. У меня это работает сейчас ... высоко ценится. - person Brian T Hannan; 13.07.2011