Почему мой пакетный файл Windows продолжает цикл после выполнения условия? - PullRequest
2 голосов
/ 13 июля 2011

По сути, я хочу скопировать последнюю версию 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

1 Ответ

3 голосов
/ 13 июля 2011

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

if "counter"==1 goto install (

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

Пояснение (в случае необходимости):

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...