Назад | Перейти на главную страницу

если есть! не работает в пакетном файле

У меня есть пакетный скрипт, в котором я использую несколько операторов if exists, проблема в том, что все операторы работают, кроме одного.

Устанавливаются следующие переменные

SETLOCAL ENABLEDELAYEDEXPANSION
SET basedrive=E:
SET tfworkspace=!basedrive!\TFS
SET envdefault=%1
SET projenv=!envdefault!
echo subapp=!subapp! subappservice=!subappservice! 
SET tfworkspacepath=!tfworkspace!\!releasebranch!\!app!\!subapp!

Это утверждение работает,

if exist "!tfworkspacepath!" (robocopy "!tfworkspacepath!"\sourcecode\messagebroker\ /E /NFL /NJS /NDL /ETA  "!basedir!\!messagebroker!" )  else SET /a foldererror=1
SET tfworkspacepathservice=!tfworkspace!\!releasebranch!\!app!\!subapp!\sourcecode\build\!projenv!

Этот оператор не работает, не работает, я имею в виду, что даже если путь не существует, он все еще пытается выполнить robocopy.

if exist !tfworkspacepathservice! (
  robocopy !tfworkspacepathservice! /E /NFL /NJS /NDL /ETA  "!basedir!\!scripts!") else  SET /a foldererror =!foldererror!+1

Я новичок в пакетной записи, пожалуйста, помогите мне

Прежде всего, мои извинения всем, кто пришел сюда, пытаясь помочь.

что случилось ?

У меня был оператор if, который проверяет переменную субприложения, если она пуста, с точки зрения синтаксиса, она была несовершенной. см. синтаксис BAD ниже

if NOT !subappservice!=="" (SET scripts=!scripts!\!subapp!) else SET projenv=!projenv!\!subappservice!& SET scripts=!scripts!\!subapp!\!subappservice!

Я исправил это ниже, чтобы исправить проблему

if [!subappservice!]== []  (SET scripts=!scripts!\!subapp!) else SET projenv=!projenv!\!subappservice!& SET scripts=!scripts!\!subapp!\!subappservice!

мое мнение - даже у вас был плохой или несовершенный синтаксис CMD.exe не выдает никаких предупреждений, и я продолжал проверять свой скрипт, пока не нашел это случайно. я помещаю это здесь, чтобы кто-то другой мог извлечь выгоду из моей ошибки :)