Канал (|
) инициирует два новых экземпляра cmd
для любой из сторон, поэтому любые изменения среды (например, переменные) не передаются в экземпляр cmd
хоста.
Переместите командную строку dir
в набор for /F
, например:
for /F "tokens=*" %%a in ('dir /A-D /S "%_sourceFolder%" ^| find "bytes" ^| find /V "free"') do set _localvar=%%a
Обратите внимание, что канал здесь экранирован (например, ^|
), чтобы скрыть его от хостинга.cmd
экземпляр, поэтому он выполняется в экземпляре cmd
, созданном for /F
.Присвоение переменной больше не используется в канале, поэтому назначенное значение, наконец, станет доступным.
Я добавил еще один фильтр (find /V "free"
), так как я предполагаю, что вы не хотите захватывать финал ""bytes free", но предыдущая.