У меня есть файл fetchDb.bat, который вызывает множество файлов .sql для обновить базу данных до последней версии
это команда, используемая для выполнения содержимого файла .Sql.
sqlcmd %Sqlinstance% -d DataBase -i "fileName.sql" | tee "FileNameOutput.txt"
но это сообщение всегда появляется для меня 'tee' не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл.
tee ( Tee-Object )
— это командлет, который поддерживается в пауэршелл. поэтому вам нужно использовать powershell для этого или, вы можете использовать команду ниже для сохранить вывод в файл в летучей мыши
COMMAND >> Filename
в твоем случае :
sqlcmd %Sqlinstance% -d DataBase -i "fileName.sql" >> "FileNameOutput.txt"
Спасибо, но есть ли другое решение для передачи этой команды из powershell в Cmd?
да. следуйте этому: stackoverflow.com/questions/16436405/…
В оболочке CMD вы можете выполнить одно из следующих действий, но убедитесь, что ваш пакетный файл повторяет только то, что вы хотите видеть в выходном файле. Это позволит вам использовать tee
.
Использование пакетного файла:
PowerShell.exe -Command ".\fetchDB.bat | tee 'filenameoutput.txt'"
С помощью команд, которые можно передать в PowerShell:
PowerShell.exe -Command "$sqlinstance='servername'; sqlcmd.exe -S $sqlinstance -d Test -i 'fileName.sql' | tee 'filenameoutput.txt'"
# You can use this option if your CMD shell has variable sqlinstance defined
powershell.exe -Command "sqlcmd.exe -S %sqlinstance% -d Test -i 'fileName.sql' | tee 'filenameoutput.txt'"
Из консоли PowerShell вы можете просто вызвать полный пакетный файл и передать его в tee
.
.\fetchdb.bat | tee "filenameoutput.txt"
спасибо, я также попробовал утилиту unix, и она отлично работает
Tee
— это псевдоним дляTee-Object
, принадлежащий только PowerShell. Эта часть кода выполняется в оболочке или сеансе PowerShell или в оболочке cmd? Если это прямая строка кода из батника, то поэтому и не работает. Вы можете запустить этот фрагмент из PowerShell, если правильно передадите%Sqlinstance%
.