follyx
Goto Top

Symbolische links einer Ordnerstruktur

ich möchte von einer Ordnerstruktur von jedem einzelnen Unterordner einen symbolischen Link erstellen lassen.
wie kann ich das am einfachsten automatisieren?

Content-Key: 497234

Url: https://administrator.de/contentid/497234

Ausgedruckt am: 19.03.2024 um 03:03 Uhr

Mitglied: it-fraggle
it-fraggle 21.09.2019 um 11:25:15 Uhr
Goto Top
Ein Skript könnte dir helfen.
Mitglied: Crusher79
Crusher79 21.09.2019 um 11:30:12 Uhr
Goto Top
Hallo erstmal...

Powershell z.B. Wobei es noch auf das Zielsystem ankommt.

New-Item -Path $link -ItemType SymbolicLink -Value $ziel

oder

 $command = "cmd /c mklink /d"  
  invoke-expression "$command ""$link"" ""$ziel"""  


Die PS Version kann man auch einfach festellen. Entweder nutzt du dann die neue Funktion oder die alte.

Bei Windows 10 würde auch nur New-Item reichen.

mfg Crusher
Mitglied: Follyx
Follyx 21.09.2019 um 12:26:53 Uhr
Goto Top
würde das Script dann die Ordnernamen als Linknamen benutzen? Weil die Variable $link steht ja so im Raum...
Mitglied: Follyx
Follyx 21.09.2019 um 12:31:24 Uhr
Goto Top
kannst Du mir da bitte ein genaueres Beispiel geben?
Mitglied: Crusher79
Crusher79 21.09.2019 um 12:33:22 Uhr
Goto Top
Habe im moment wenig Zeit.

Natürlich ist es nur ein Fragment und $link steht im Raum. Du kannst mit PS einfach Child-Items auslesen und die Werte dann so manipulieren dass du nur das hast, was du für die Verküpfungen brauchst.

Da fehlt wie gesagt noch einiges. Dann würde es aber rasch alle Links automatisch erstellen.
Mitglied: Crusher79
Lösung Crusher79 21.09.2019 aktualisiert um 13:03:54 Uhr
Goto Top
Quelle ist alles im Laufwerk I:\

Ziel ist G:\test

Es liest alle Ordner (IsContainer) und nimmt den FullName (Pfad + Name) - hier nur kein Dateiname- als Wert für den Link.

Das Ziel wird durch Pfad + den jeweilige Ordnername ergänzt. Fertig.

$quelle="I:\"  
$zielpfad = "G:\test\"  

Get-ChildItem $quelle | Where-Object {$_.PSIsContainer } | 
 Foreach-Object {

$ziel = $zielpfad + $_.Name

New-Item -Path $ziel -ItemType SymbolicLink -Value $_.FullName

} 
Mitglied: erikro
Lösung erikro 21.09.2019 um 14:06:00 Uhr
Goto Top
Moin,

Zitat von @Crusher79:
$quelle="I:\"  
> $zielpfad = "G:\test\"  
> 
> Get-ChildItem $quelle | Where-Object {$_.PSIsContainer } | 
>  Foreach-Object {
> 
> $ziel = $zielpfad + $_.Name
> 
> New-Item -Path $ziel -ItemType SymbolicLink -Value $_.FullName
> 
> } 
> 
> 

Warum einfach, wenn's auch kompliziert geht? face-wink

get-childitem $quelle -directory | %{new-item -path "$zielpfad$_.Name" -itemtype symboliclink -value $_.fullname}  

Wobei ich bei der Frage eher an

ls -d | while read -r line; do ln $line /mnt/wherever/$line; done

gedacht habe. face-wink

Liebe Grüße

Erik
Mitglied: 140913
Lösung 140913 21.09.2019 aktualisiert um 15:24:27 Uhr
Goto Top
Warum einfach, wenn's auch kompliziert geht?
Ja dann aber auch funktionierend 😁
"$zielpfad$_.Name"
Dat funktioniert nicht, wenn so dann braucht es
 "$zielpfad$($_.Name)"
Mitglied: Follyx
Follyx 21.09.2019 um 19:36:31 Uhr
Goto Top
klasse,, vielen Dank an alle. Genauso wollte ich es
Mitglied: Crusher79
Lösung Crusher79 22.09.2019 um 10:56:25 Uhr
Goto Top
@Eric: stimmt schon.

Aber was sollen %, ? oder gci bedeuten? So hat man zumindest was zum nach googlen. Sonst müsste du immer mit Get-Alias oder Get-Member einleiten.

Vermuitlich wird es aber bei vielen erstmal bei Copy&Paste bleiben. Oder man kombiniert mit guten alten DOS Befehlen, die einen Strings um die Ohren hauen statt Objekte.
Mitglied: erikro
erikro 23.09.2019 aktualisiert um 08:49:48 Uhr
Goto Top
Moin,

Zitat von @140913:

Warum einfach, wenn's auch kompliziert geht?
Ja dann aber auch funktionierend 😁
"$zielpfad$_.Name"
Dat funktioniert nicht, wenn so dann braucht es
>  "$zielpfad$($_.Name)"
> 

Nee, das .name war falsch:

PS P:\> $zielpfad = "c:\test\"  
PS P:\> $childs = get-childitem -directory
PS P:\> $childs | %{"$zielpfad$_.name"}  
c:\test\downloads.name
c:\test\ucs.name
c:\test\AD-Umstellung.name
c:\test\notebook.name
c:\test\copy.name
c:\test\p.name
c:\test\ps1.name
C:\test\isos.name
c:\test\stick.name
c:\test\vba.name
c:\test\scan.name
c:\test\test.name
PS P:\> $childs | %{"$zielpfad$_"}  
c:\test\downloads
c:\test\ucs
c:\test\AD-Umstellung
c:\test\notebook
c:\test\copy
c:\test\ldap
c:\test\p
c:\test\ps1
c:\test\isos
c:\test\stick
c:\test\vba
c:\test\scan
c:\test\test

Liebe Grüße

Erik
Mitglied: 140913
140913 23.09.2019 aktualisiert um 09:39:11 Uhr
Goto Top
Zitat von @erikro:
Nee, das .name war falsch:

Vorsicht damit, das kann je nach System andere Ergebnisse liefern da sich der Default-Rückgabewert des Objects erstens nach OS unterscheiden kann zweitens sich auch ändern lässt, siehe Beispiel
https://tio.run/##K8gvTy0qzkjNyfn/31BPz9BAoUa1WqkktbhESaFGITc7JbNIAcyNV4 ...