El comando CD devuelve el directorio actual y la variable %CD% devuelve el mismo resultado en una variable de entorno:
c:\Temp\test\test1>cd
c:\Temp\test\test1
c:\Temp\test\test1>@echo %cd%
c:\Temp\test\test1
Este comando repite el resultado del comando CD.
for /F %f in ('cd') do @echo %f
así que debería conseguir
c:\Temp\test\test1
pero en realidad obtengo:
c:\Temp\test\test1>for /F %f in ('cd') do @echo %f
c:\work\Consulting
pero usar %CD% me da esto:
c:\Temp\test\test1>for /F %f in ('@echo %cd%') do @echo %f
c:\Temp\test\test1
Esto estaba funcionando en mi máquina la última vez que lo probé hace unos meses (está en un script que no se usa con frecuencia).
Lo probé en otra máquina y funciona bien allí. Entonces estoy pensando que esto se debe a cómo abro el símbolo del sistema y configuro el directorio de trabajo para c:\work\Consulting
usar el siguiente script de registro:
Editor del Registro de Windows Versión 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="cd /d C:\\Work\\Consulting"
(Para su información, esto es necesario si desea abrir un símbolo del sistema elevado en un directorio en particular)
¡Ay, no!
Editar: Por supuesto que tengo una solución, pero me preguntaba qué es lo que he hecho para que esto suceda.
Respuesta1
Sí, su entrada de registro de ejecución automática está causando el problema. FOR /F
ejecuta comandos dentro de la cláusula IN() a través de CMD.EXE. Y CMD.EXE ejecuta la ejecución automática a menos que /D
se utilice la opción. Pero no hay manera de forzar a FOR /F a utilizar la /D
opción. :(
También me gusta tener mi shell de comandos abierto en una carpeta en particular, pero no uso la ejecución automática. En lugar de eso, creo un acceso directo y edito las propiedades para configurar "Comenzar en:" en la carpeta deseada.
Si realmente quieres, creo que aún puedes usar la ejecución automática. Creo que realmente solo desea que su ejecución automática se realice en CD al crear una instancia inicial de su sesión CMD. Puede modificar su entrada de registro de la siguiente manera para lograrlo:
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="if not defined AutoRunComplete set AutoRunComplete=TRUE&cd /d C:\\Work\\Consulting"
Si su lógica de ejecución automática se vuelve más compleja, es posible que desee crear un script por lotes y luego hacer que la ejecución automática llame a ese script.
Respuesta2
¿Por qué no lo desactivas HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun
por completo y en su lugar creas un acceso directo como el siguiente?