Por algum motivo, decidi experimentar o Windows 8 na minha máquina de desenvolvimento. Até agora, tudo bem, até que eu tento iniciar o Powershell que tem algumas customizações, incluindo extrair as PATH
de vcvars32.bat
, então tenho acesso a todas as várias ferramentas de desenvolvimento.
Inicialmente, o script foi extraído daqui link com algumas alterações permitir que ele seja executado em uma instância do Powershell x64, então ele ficou assim:
function Get-Batchfile($file)
{
$theCmd = "'"$file'" & set"
cmd /c $theCmd | Foreach-Object {
$thePath, $theValue = $_.split('=')
Set-Item -path env:$thePath -value $theValue
}
}
function VsVars32($version = "10.0")
{
$theKey = "HKLM:SOFTWARE\Wow6432Node\Microsoft\VisualStudio\" + $version
$theVsKey = get-ItemProperty $theKey
$theVsInstallPath = [System.IO.Path]::GetDirectoryName($theVsKey.InstallDir)
$theVsToolsDir = [System.IO.Path]::GetDirectoryName($theVsInstallPath)
$theVsToolsDir = [System.IO.Path]::Combine($theVsToolsDir, "Tools")
$theBatchFile = [System.IO.Path]::Combine($theVsToolsDir, "vsvars32.bat")
write-host $theBatchFile
Get-Batchfile $theBatchFile
[System.Console]::Title = "Visual Studio " + $version + " Windows Powershell"
}
VsVars32
E funcionou perfeitamente bem no Windows 7. Agora, no Windows 8, recebo o seguinte:
'C:\Program' is not recognized as an internal or external command, operable program or batch file.
Após um exame mais aprofundado, parece que algo mudou com a forma como cmd /c
funciona. Como apenas executar a linha cmd
sozinha, resulta nisso:
PS> cmd /c "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat"
'C:\Program' is not recognized as an internal or external command, operable program or batch file.
Alguém encontrou um problema semelhante e esperamos que seja uma solução alternativa?
EDITAR:
Como mencionado na resposta abaixo, pode haver um problema de citação. Eu tentei isso mesmo antes de postar, e consegui isso para o meu problema:
PS> cmd /c ""C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat""
x86 : The term 'x86' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:28
+ cmd /c ""C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvar ...
+ ~~~
+ CategoryInfo : ObjectNotFound: (x86:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Algumas permutações diferentes de citações:
Double envolto em aspas simples:
PS> echo '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat"'
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat"
PS> cmd /c '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat"'
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
Aspas duplas com escape:
PS> echo "'"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat'""
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat"
PS> cmd /c "'"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat'""
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
Mais uma vez: Exatamente o mesmo script trabalhado no Windows 7.