Possíveis alterações no Windows 8 cmd?

5

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.

    
por Matt Sieker 24.10.2012 / 19:58

3 respostas

1

Se você estiver usando o Windows Power Shell, precisará usar "" (aspas duplas) se tiver espaços no caminho.

""C:\Program Files""

Exemplo: cmd /c ""start cd 'C:\Program Files'"" abre um novo prompt de comando com o diretório atual como C:\Program Files . Se não estiver entre aspas duplas, isso causaria um erro devido ao espaço fechado ''.

Editar: também funciona com aspas duplas.

Edit: Opcionalmente, você pode escapar do espaço usando o 'caractere (back-quote / back-tick).

cmd /c start cd C:\Program' Files
    
por 24.10.2012 / 20:11
0

Da leitura desta pergunta: link no estouro da pilha parece que o cmd deve estar no formato

cmd.exe /c "'"$_cmd'""

Observe as duas aspas duplas no final, você só tem uma.

Na linha:

cmd /c "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat"

Talvez esteja tratando o argumento que está entre aspas como uma string C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat sem qoutes, então talvez devesse ser

cmd /c """C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat"""

i.e. "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat" como uma string, que seria a acima.

    
por 24.10.2012 / 21:00
0

Eu estava prestes a atualizar a pergunta com mais algumas informações, com o eco do comando que seria executado no Win7 e no Win8. No processo de fazer isso, notei algo. Meu PC com Windows 7 tinha o VS2010 e o VS2012 instalados, com a caixa do Win8 tendo apenas o VS2012.

Alterar o valor padrão $Version na função VsVars32 para 11.0 fez tudo funcionar novamente. Agora, quanto ao motivo pelo qual não foi impresso o caminho completo, o que tornaria esse problema muito mais fácil de solucionar, é uma boa pergunta.

    
por 30.10.2012 / 04:05