¿Cómo puedo seguir un acceso directo de Windows en Power Shell?

11

Estoy usando powershell y tengo un acceso directo a mi directorio de destino en el directorio actual. Quiero cambiar el directorio actual al indicado por el acceso directo. Lógicamente, lo que quiero hacer es:

cd your-files-here.lnk

y terminar donde sobre esos puntos. Lo que obtengo en cambio es:

Set-Location : Cannot find path 'your-files-here.lnk' because it does not exist.
At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\pscx\Modules\CD\Pscx.CD.psm1:111 char:17
+                 Set-Location <<<<  $path -UseTransaction:$UseTransaction
    + CategoryInfo          : ObjectNotFound: (your-files-here.lnk:String) [Set-Location], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

Lo intenté

ii your-files-here.lnk

Pero esto abre una ventana del explorador en lugar de cambiar el directorio actual.

Matthew Scouten
fuente

Respuestas:

6

Puede agregar esto a su Microsoft.PowerShell_profile.ps1archivo. El cdcomando funcionará según lo deseado.

remove-item alias:cd -force
function cd($target)
{
    if($target.EndsWith(".lnk"))
    {
        $sh = new-object -com wscript.shell
        $fullpath = resolve-path $target
        $targetpath = $sh.CreateShortcut($fullpath).TargetPath
        set-location $targetpath
    }
    else {
        set-location $target
    }
}
Kevin Panko
fuente
Tuve que cambiar "$ fullpath = resolve-path $ target" a "$ fullpath = (resolve-path $ target) .Path" para que funcione.
Omaer
2
Además, he notado que PowerShell auto-complete no funciona para los no directorios después de escribir "cd", lo que significa que tengo que escribir el nombre completo del archivo .lnk.
Omaer
8

Desafortunadamente, Windows no facilita el trabajo con accesos directos. Esto debería funcionar:

$sh = New-Object -COM WScript.Shell
cd $sh.CreateShortcut('your-files-here.lnk').TargetPath
EBGreen
fuente
Esto funciona cuando el objetivo es una ruta local convencional, pero en al menos un caso, el acceso directo apunta a una ruta UNC. En este caso, TargetPath está vacío.
Matthew Scouten
Eso es extraño, tengo accesos directos .lnk a rutas UNC y la propiedad .Targetpath tiene la ruta en ella. Incluso traté de tomar uno y dejar el targetpath vacío y no se salvaría de esa manera.
EBGreen
No importa. Estaba haciendo algo más mal. Funciona bien.
Matthew Scouten
¡Debería decirnos qué estuvo mal para que las futuras generaciones puedan beneficiarse!
uSlackr
1
En resumen: CreateShortcut quiere una ruta absoluta.
Matthew Scouten
3

¿Es el atajo una necesidad?

Podrías usar un enlace de Windows para esto. Consulte mklink /?para obtener más información sobre los enlaces / puntos de unión de Windows.

uSlackr
fuente
No soy yo quien decidió los atajos.
Matthew Scouten
1
Esta respuesta fue tremendamente útil para mí y la solución funcionó sin problemas, evento si técnicamente no resuelve el problema (acceso directo).
twigmac