No se puede avanzar con cd
Tengo problemas para avanzar a través de un camino con PowerShell. Puedo moverme hacia arriba en el directorio pero no hacia abajo. Esta es la situación:
Abro PowerShell y escribo el comando "pwd" y muestra que actualmente estoy en PS C: \ Users \ Robert Inspiron14>
Escribo el comando "cd .." y ahora paso a PS C: \ Users>
Luego intento cambiar de directorio escribiendo: "cd C: \ Users \ Robert Inspiron14" y no puedo. Desafortunadamente, todavía no puedo publicar una foto por falta de reputación.
Puedo realizar el cambio en CMD pero no en PowerShell. Además, no sé cómo cambiar el usuario de "Robert Inspiron14" a solo "Robert". ¡Se agradece cualquier ayuda!
Respuestas
Antes de que PowerShell pueda ejecutar su cdcomando, necesita analizarlo , y el analizador de PowerShell interpreta su comando de esta manera:
cd C:\Users\Robert Inspiron14
\/ \_____________/ \________/
Command Name | |
argument 1 |
argument 2
En otras palabras, C:\Users\Roberty Inspiron14se interpretan como argumentos separados .
Ninguno de los argumentos es una ruta a un directorio válido, por lo que cd(o más bien Set-Locationpara cuál cdes un alias) arroja un error.
Puede forzar a PowerShell a reconocer C:\Users\Robert Inspiron14como un argumento de cadena única calificando sus límites usando comillas (ambos "y 'funcionarán):
cd 'C:\Users\Robert Inspiron14'
Puede leer más sobre cómo PowerShell analiza las expresiones de comando en el about_Parsingtema de ayuda
Para complementar la útil respuesta de Mathias R. Jessen con más información básica:
Citar un argumento que contiene espacios es una necesidad sintáctica general, en todos los shells , porque los espacios sin comillas se utilizan para separar múltiples argumentos .
No son solo los espacios los que requieren comillas, sino cualquiera de los llamados metacaracteres de PowerShell (caracteres que, cuando se usan sin comillas, tienen función sintáctica ); por ejemplo, pasar la ruta a un directorio literalmente llamado también a;brequiere entre comillas, dado que de ;otro modo se interpretaría como un separador de instrucciones .
Hay varios estilos de citas :
Dado que su ruta es una ruta literal , no contiene referencias ni expresiones variables, las
'...'comillas ( comillas simples ) son la mejor opción.
Use"..."-quoting (comillas dobles ) si su ruta contiene variables o subexpresiones, es decir, si necesita una cadena expandible (cadena de interpolación). [1]
Consulte esta respuesta para obtener una descripción general de los literales de cadena en PowerShell.Otra solución menos común es escapar individualmente de los caracteres espaciales con el carácter
`de escape de PowerShell:cd C:\Users\Robert` Inspiron14
También tenga en cuenta:
La finalización de la pestaña de PowerShell aplica automáticamente las cotizaciones según sea necesario .
cd..es el nombre de una función incorporada en PowerShell , cuyo único propósito es emularcmd.exeel comportamiento ( cuestionablemente permisivo) (ver más abajo); la función realiza unaSet-Location ..llamada sintácticamente correcta (verificar ejecutando${function:cd..}), con un espacio que separa el nombre del comando de su argumento.
Contraste con cmd.exe:
Desafortunadamente, cmd.exeel cdcomando incorporado decidió no hacer cumplir sus reglas de sintaxis habituales y habilitó llamadas como cd C:\Program Files.
Nunca debería haber hecho eso : si bien es conveniente a primera vista, constituye una excepción problemática de las reglas habituales que invita a la confusión .
Tenga en cuenta que cmd.exela función de tabulación cita correctamente los argumentos que contienen espacios.
De manera similar, cd..desafortunadamente se permitió como una alternativa sintácticamente excepcional a la correctacd .. ; consulte los comentarios sobre esta respuesta para obtener más detalles.
[1] Nota: las "..."comillas no son estrictamente necesarias si usa referencias de variables en una ruta, siempre que los componentes literales no requieran comillas; por ejemplo, $HOME\fooestá bien sin citar, mientras "que "$HOME\foo bar"se requieren los alrededores . Con subexpresiones ( $(...)), las reglas se vuelven más complicadas , por lo que el enfoque más simple es usar siempre"..." -comillas con ellas.