Дмитрий, так как раз обе исполняются, а потом проверка - я же вынес вызов функции из if. По моему, это наиболее правильный вариант в вашем случае - не зачем городить огороды, вами предложенные, овчинка не стоит того что бы тратить на нее время.
83349 M, попробуйте запустить из cmd.exe
ConEmu использует родной cmd.exe.
п.2 проверить просто - поищите в установочном каталоге и посмотрите переменную PATH до запуска и после.
Получается тоже самое при 2-ом старте выводит !namePath!.
т.е. когда батник запускаете второй раз?
Это какая-то фигня, если честно. У меня отрабатывает сколько угодно раз, только я в начало строки с запуском codeceptjs добавил echo.
Я так понял у вас такое же поведение?
Вы батник как запускаете? из консоли? из файлового менеджера? (какого?) Из проводника?
Никогда не видел эту софтину (codeceptjs), есть предположение:
1.она добавляет путь к себе в переменную PATH, причем, видимо ставит его в начало.
2.Возможно у него в составе есть какая-то своя командная строка (cmd.exe) и после окончания работы он ее запускает.
3.В начале батника присутствует строка:
SetLocal EnableDelayedExpansion
?
Именно эта команда включает отложенное разъименование и !! вместо %%
Это всего лишь предположение, как объяснить подобное поведение по другому - я не знаю.
83349 M, ?test.js - в маске ? - это один любой символ, на сколько я понял вам нужно использовать * - несколько любых символов.
Я так и не понял: вас интересуют файлы testF\_test.js или testF\*_test.js ?
У вас маска в форе ?_test.js, а ниже в 4 set используете другой вариант.
Попробуйте вариант for из поста выше. Он должен работать.
Смысл его в том, что запускается команда
dir /s /b "%begindir%\*_test.js"
которая выводит все файл *_test.js во всех подкаталогах указанного каталога
дальше с помощью finstr "testF" - из всех выведенных dir строк оставляем только те, где присутствует "testF" и каждую из этих строк обрабатываем в цикле.
Можете по отдельности и в комбинации эти команды запустить и посмотреть вывод.
83349 M, В for нельзя передавать одновременно 2 ключа - они включают разные режимы работы и не совместимы друг с другом. см. for /?
Вам нужно заменить ваш for на что-то вроде этого:
for /f "tokens=* delims=" %%i in ('dir /s /b "%begindir%\*_test.js" ^| findstr "testF" ') do (
...
)
Восклицательные знаки не нужно экранировать - они в команду не попадут, а заменяться путем из переменной, кавычки то же не влияют на разъименование переменных. Наверное так:
run -o "{\"tests\": \"!namePath!/**/*_test.js\"}"
83349 M, Зачем все эти "палки" и кавычки?
Покажите строку, которую вы хотите получить на выходе.
!namePath\! - вы закрыли закрывающий ! слэшем, поэтому имя переменной нормально не распозналось. Вообще, по моему, тут у вас ничего экранировать ненужно.
Profi_GMan, Если выполнять непосредственно в командной строке, то нужно %%a заменять на %a.
Но там все равно ошибка из-за какой-то кривой работы wmic.
Если делать через промежуточный файл, то нормально отрабатывает:
wmic volume get Label,DeviceID,DriveLetter /format:csv >tmp.txt
for /f "tokens=3 delims=," %%a in ('type tmp.txt ^| findstr Data') do echo %%a
del /f/q tmp.txt
Profi_GMan, Смотря каким вариантом вы собираетесь пользоваться.
Если с findstr, то GUID должен присутствовать, иначе findstr не сможет отфильтровать.
Если с where - можно, просто уберите из фразы get все лишние столбцы
Profi_GMan, у wmic можно задавать условие с помощью where, примерно как в SQL, а можно и фильтровать с помощью findstr:
wmic volume get Label,DeviceID,DriveLetter | findstr
ink, В инетах пишут, что в x64 винде его нет, т.к. видимо отсутствует 16 битная подсистема.
Полно же других консольных текстовых редакторов: www.kompx.com/ru/konsolnye-prilozhenija-dlja-windo...
Лично я давно использую Far как файловый менеджер и его встроенный текстовый редактор.
По вашей проблеме - возможно что-то случилось с этой самой 16 битной подсистемой. Попробуйте прогнать:
sfc /scannow
Кирилл Жиляев, Да, похоже на то. Видимо 2013 студия прописала в глобальных переменных окружения свои пути. Скорее всего придется вручную разруливать.
Можно написать свой батник в котором будете обнулять переменные окружения студии и из него запускать сценарий из 2008 студии.
Чтоб определить какие переменные окружения нужно чистить запустите аналогичный сценарий от 2013 студии, дальше введите команду set, она напечатает все переменные окружения. Обнулять нужно переменные типа INCLUDE, LIB, LIBPATH, начинающиеся на VC и VS и WindowsSDK, возможно что-нибудь еще.
По идее в такой схеме после очистки переменных окружения сценарий от 2008 студии настроит их под свою версию.
Очищать переменные окружения так:
set "<имя переменной>="
Но если вы ставили 2008 после 2013, то может так оказаться, что у вас не установился WindowsSDK от 2008 студии - установщик нашел более позднюю версию и решил не устанавливать свою старую.
Другой вариант, менее муторный - поднять чистую виртуалку, поставить туда 2008 студию и собирать в виртуалке.