Comando CD não retorna resultados corretos no loop FOR

Comando CD não retorna resultados corretos no loop FOR

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 CD

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

então eu deveria pegar

c:\Temp\test\test1

mas na verdade eu entendo:

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 à maneira como abro o prompt de comando e defino o diretório de trabalho c:\work\Consultingusando o seguinte script de registro:

Editor de registro do Windows versão 5.00

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

(Para sua informação, 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 queria saber o que fiz para que isso acontecesse.

Responder1

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

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 definir "Iniciar em:" na pasta desejada.

Se você realmente quiser, acho que ainda pode usar o Autorun. Eu acredito que você realmente deseja apenas o Autorun em CD na instanciação inicial da sua sessão 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 sua lógica de execução automática ficar mais complexa, talvez você queira criar um script em lote e fazer com que a execução automática chame esse script.

Responder2

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

1

informação relacionada