Цикл for
, который у вас есть, выполняет этот скрипт и запускается для каждой строки, которую возвращает скрипт. В основном это означает, что ваша переменная окружения %ScriptOut%
содержит только последнюю строку вывода (так как она перезаписывается каждый раз, когда цикл обрабатывает другую строку). Так что если ваш скрипт возвращает
a
b
c
, тогда %ScriptOut%
будет содержать только c
. Если последняя строка пуста или содержит только пробелы, iot эффективно удалит %ScriptOut%
, поэтому при выполнении
echo %ScriptOut%
вы получите только ECHO is on.
, поскольку после подстановки переменной все, что осталось, это echo
. Вы можете использовать
эхо.% ScriptOut%
, в этом случае вы получите пустую строку (что будет %ScriptOut%
в этой точке.
Если вы хотите напечатать каждую строку, которую скрипт возвращает в файл, вы можете сделать это намного проще, просто выполнив
cscript C:\MyProj\Sources\SearchString.vbs > C:\ThreePartition\Sources\myfile.txt
или используйте >>
для перенаправления, если вы хотите, чтобы вывод был добавлен в файл, как Станислав Князев указал .
Если вы просто хотите сохранить последнюю непустую строку, то может сработать следующее:
for /f "delims=" %%a in ('C:\MyProj\Sources\SearchString.vbs') do (
if not "%%a"=="" set ScriptOut=%%a
)
, который будет устанавливать %ScriptOut%
только в случае, если переменная цикла не пуста.