2009-08-25 6 views
1

Я собрал пакетный файл ниже; У меня нет большого опыта работы с пакетными файлами, и я не могу понять, почему файл выходит из строя с сообщением об ошибке: сообщениеПакетный файл для оператора цикла

Команда DO была неожиданной.

Глядя на следующий код, кто-нибудь знает, что я сделал не так? Благодарю.

@ECHO OFF 
REM Set arguments supplied by Subversion 
SET REPOS = %1 
SET REV = %2 

REM Set working directory path 
SET WORKSPACE = D:\apache\htdocs 

REM Assign changes to variable 
SET CHANGES = svnlook changed %REPOS% -r %REV% 

REM Update only changed files 
FOR /f %%a IN %CHANGES% DO svn update %%a 

ответ

0

Я предполагаю, что %CHANGES% не в правильном формате/структуры цикла, так что DO не может быть выполнена. Добавьте следующую строку перед циклом, чтобы проверить, что вы получаете то, что ожидали от команды SET CHANGES;

ECHO %CHANGES% 

Если присвоение более пакетный код для выполнения может понадобиться использовать CALL. Что вы передаете при вызове командного файла для %1 и %2?

+0

Другая программа на самом деле должна вызывать этот командный файл и передавать каталог и целочисленное значение. Я добавил код для повторения аргументов% 1 &% 2; когда я сам тестировал пакетный файл и передавал ему значения, командный код повторял пробелы, указывающие, что переданные аргументы НЕ назначались, ie post-commit.bat file: /// d:/repos 10 Любая идея, почему аргументы не назначаются? – 2009-08-25 17:10:19

+0

@ Dan Действительно ли это так просто, как @Binary Worrier указывает? –

+0

@Dave Anderson: предложение Binary Worrier находится на правильном пути, но не совсем полно; код нуждается в опции «usebackq» и обратных тиках. – 2009-08-27 17:06:43

0

Вы можете попытаться запустить его без указания REM. Комментарии иногда заставляют вещи работать по-другому.

6
FOR /f %%a IN %CHANGES% DO svn update %%a 

должна быть

FOR /f %%a IN (%CHANGES%) DO svn update %%a 

Надеется, что это помогает,

0

После изменения моего исходного кода я получил его 'работать'. Команда svnlook возвращает, например: trunk \ images \ smileyface.jpg

В настоящее время цикл for возвращает только «U», а не «smileyface.jpg», который я хочу. Итак, хотя код теперь работает, он все еще работает, как мне хотелось бы (все еще работаю над ним).

Ниже приведен обновленный код (Примечание: мне пришлось удалить все пробелы между моими переменными и их назначенными значениями).

@ECHO OFF 
REM Set arguments supplied by Subversion 
SET REPOS=%1 
SET REV=%2 

REM Set working directory path 
SET WORKSPACE=D:\apache\htdocs 

REM Assign changes to variable 
SET CHANGES=svnlook changed %REPOS% -r %REV% 

REM Update only changed files 
FOR /F "usebackq" %%a IN (`%CHANGES%`) DO (svn update %%a) 
Смежные вопросы