Выражение переменной %Var% не работает в цикле for в пакетном файле

FOR /F "tokens=* USEBACKQ" %F IN (java -jar %MAVEN_HOME%\jenkins-cli.jar -s http://someip.com build /dev/ -s  --username **** --password ***) DO (SET var=%F)

Здесь значение %MAVEN_HOME% не заменяется фактическим значением, но когда я запускаю это без цикла for, оно работает нормально.

Может кто-нибудь решить эту проблему и заменить MAVEN_HOME фактическим значением?


person arjun kumar mehta    schedule 03.07.2018    source источник
comment
Если это скрипт файла .bat, вы должны удвоить символ % в переменной F. Используйте %%F. Кроме того, поместите команду java в апострофы. Если вы хотите поместить команду в обратные кавычки (GRAVE ACCENT), то вы должны указать "usebackq tokens=*".   -  person lit    schedule 03.07.2018


Ответы (1)


Вам нужно поместить команду в ` ` вот так

FOR /F "tokens=* USEBACKQ" %F IN (`java -jar %MAVEN_HOME%\jenkins-cli.jar -s http://someip.com build /dev/ -s  --username **** --password ***`) DO (SET var=%F)

потому что синтаксис

C:\>for /?
Runs a specified command for each file in a set of files.

FOR %variable IN (set) DO command [command-parameters]

  %variable  Specifies a single letter replaceable parameter.
  (set)      Specifies a set of one or more files.  Wildcards may be used.
  command    Specifies the command to carry out for each file.
  command-parameters
             Specifies parameters or switches for the specified command.

To use the FOR command in a batch program, specify %%variable instead
of %variable.  Variable names are case sensitive, so %i is different
from %I.

...

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

    or, if usebackq option present:

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ('string') DO command [command-parameters]
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]

Как видите, у вас есть USEBACKQ, поэтому команда должна быть окружена обратными кавычками, а также сказано, что вам нужно удвоить процент, если вы хотите использовать команду for в пакетном файле.

person phuclv    schedule 03.07.2018
comment
Привет @phuclv, этот способ мне тоже не помогает. Проблема в том, что после использования кавычек эта команда ведет себя неправильно... даже она удаляет несколько слов из команды. Попробуйте выполнить эту команду. - person arjun kumar mehta; 03.07.2018
comment
@arjun, если вы запускаете команду из пакетного файла, что и должно быть, потому что вы добавили для нее тег, вам также нужно удвоить символы процента для метапеременной, %F становится %%F! - person Compo; 03.07.2018
comment
@arjunkumarmehta, если вы запустите for /?, вы увидите, что для использования команды FOR в пакетной программе укажите %%variable вместо %variable - person phuclv; 03.07.2018
comment
Эй, спасибо всем, наконец-то это работает. в том числе '' - правильный ответ. - person arjun kumar mehta; 04.07.2018