O comando do CD não está retornando os resultados corretos sob o loop FOR

1

O comando CD retorna o diretório atual e a variável% CD% retorna o mesmo resultado em uma variável de ambiente:

c:\Temp\test\test1>cd
c:\Temp\test\test1

c:\Temp\test\test1>@echo %cd%
c:\Temp\test\test1

Este comando ecoa o resultado do comando do CD

for /F %f in ('cd') do @echo %f

então eu devo pegar

c:\Temp\test\test1

mas na verdade eu recebo:

c:\Temp\test\test1>for /F %f in ('cd') do @echo %f
c:\work\Consulting

mas usar% CD% me dá isso:

c:\Temp\test\test1>for /F %f in ('@echo %cd%') do @echo %f
c:\Temp\test\test1

Isso estava funcionando na minha máquina quando testei pela última vez há alguns meses (não é um script usado com frequência).

Eu testei em outra máquina e funciona bem lá. Então, estou pensando que isso se deve a como eu abro o prompt de comando e defino o diretório de trabalho como c:\work\Consulting usando o seguinte script de registro:

Windows Registry Editor Versão 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="cd /d C:\Work\Consulting"

(FYI isso é necessário se você deseja abrir um prompt de comando elevado para um diretório específico)

Infelizmente não!

Editar: É claro que tenho uma solução alternativa, mas fiquei imaginando o que fiz para causar isso.

    
por Preet Sangha 31.12.2012 / 00:14

2 respostas

3

Sim, sua entrada de registro do Autorun está causando o problema. FOR /F executa comandos dentro da cláusula IN () via CMD.EXE. E o CMD.EXE executa o Autorun a menos que a opção /D seja usada. Mas não há como forçar o FOR / F a usar a opção /D . : (

Eu também gosto de ter meu shell de comando aberto em uma pasta específica, mas não uso o Autorun. Em vez disso, crio um atalho e edito as propriedades para que "Start in:" seja definido como minha pasta desejada.

Se você realmente quiser, acho que ainda pode usar o Autorun. Eu acredito que você realmente só quer o seu Autorun para CD na instanciação inicial da sua sessão do CMD. Você pode modificar sua entrada de registro da seguinte maneira para conseguir isso:

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="if not defined AutoRunComplete set AutoRunComplete=TRUE&cd /d C:\Work\Consulting"

Se a sua lógica do Autorun ficar mais complexa, convém criar um script em lote e depois fazer o Autorun chamar esse script.

    
por 31.12.2012 / 01:41
1

Por que você não desativa HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun e cria um atalho como o seguinte?

    
por 01.01.2013 / 00:16