Windows-Eingabeaufforderung - Den Ordner "Dokumente" des verschobenen Benutzers abrufen


8

Ich versuche, ein einfaches Batch-Skript zu schreiben, das einige Dateien aus dem %userprofile%\DocumentsVerzeichnis kopiert . Ich teste das Skript auf meinem Computer, aber nach einigen Fehlern wurde mir klar, dass ich die Daten meines Benutzers auf eine separate Partition verschoben habe . Daher %userprofile%\Documentsist leer und (offensichtlich) nichts wird kopiert.

Ich habe bereits andere Umgebungsvariablen wie %homedrive%und ausprobiert %homepath%, aber sie zeigen immer noch auf den StandardC:\...

Gibt es eine Möglichkeit, das tatsächliche Laufwerk herauszufinden, das für die Benutzerdaten verwendet wird?

Ich benutze Windows 10.

Vielen Dank!

BEARBEITEN

Wie von Ƭᴇcʜιᴇ007 hervorgehoben, habe ich die Daten des Benutzers nicht auf eine andere Partition verschoben, sondern nur die "Haupt" -Ordner (Dokumente, Videos, ...) in einige entsprechende Ordner auf einer anderen Partition verschoben: Klicken Sie mit der rechten Maustaste auf (z ) Dokumente, Eigenschaften, Pfad.

Wie kann ich den Pfad eines Dokumentordners ermitteln, der auf diese Weise verschoben wurde?


2
% userprofile% sollte den richtigen Ordner haben, unabhängig davon, wo Sie ihn abgelegt haben. Solange Sie die Profilordner korrekt verschoben haben, sollte er korrekt sein. Wie genau haben Sie es auf die andere Partition verschoben?
6cʜιᴇ007

Ok, ich habe mich ehrlich gesagt nicht erinnert, also habe ich ein bisschen gestöbert und endlich herausgefunden, was ich getan habe. Ich habe mit der rechten Maustaste auf die "Haupt" -Ordner (Dokumente, Videos usw.) geklickt, Eigenschaften ausgewählt, die Registerkarte Pfad ausgewählt und den Pfad geändert. (Ich verwende die italienische Version von Windows und da ich die Namen, die ich auf meinem Bildschirm sehe, kaum übersetze, können einige Wörter anders sein.) Sie hatten also Recht,% userprofile% macht akut nichts falsch. Die Frage ist jedoch immer noch: Wie kann ich den tatsächlichen Pfad des Hauptordners "Dokumente" finden?
Alessandro

Dann verwechseln Sie Ihre "Bibliothek" mit dem Ordner "Dokumente" in Ihrem Benutzerprofilpfad. Zwei verschiedene Dinge ...
6cʜιᴇ007

Gibt es eine Möglichkeit, den Pfad des Ordners "Dokumente" herauszufinden, wenn man bedenkt, dass er auf diese Weise verschoben wurde?
Alessandro

Antworten:


5

Leider gibt es keine einfache Umgebungsvariable, die Sie anhand eines Stapelskripts überprüfen können, wenn Sie diese vom Standardpfad relativ zu Ihrem Profil umgeleitet haben. Die vollständige Liste der Umgebungsvariablen (einschließlich einiger undokumentierter) finden Sie hier:

http://ss64.com/nt/syntax-variables.html

Beachten Sie außerdem, dass Sie mit der Ordnerumleitung diese sogar auf eine Netzwerkfreigabe verschieben können. Es muss kein "Laufwerk" geben, das Sie alle verwenden können. Es könnte nur ein UNC-Pfad sein.

Die gute Nachricht ist, dass die gewünschten Informationen in der Registrierung an folgendem Speicherort verfügbar sind:

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Benutzer-Shell-Ordner \ Persönlich

Es gibt eine ganze Reihe von Ordnern, die Sie in diesem User Shell FoldersSchlüssel verschieben können. Das Lesen des Ordners Eigene Dateien hier mit Windows Batch sieht jedoch folgendermaßen aus:

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal

Auf meinem Computer erzeugt dies die folgende Ausgabe, die für Sie mehr oder weniger nützlich sein kann, je nachdem, was Sie benötigen und wie gut Sie mit Windows Batch-Skripten umgehen können:

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Benutzer-Shell-Ordner
    Persönliches REG_EXPAND_SZ C: \ Benutzer \ joel \ Dokumente

Sie können auch vbscript ausprobieren:

Set wshshell = CreateObject("WScript.Shell")
Documents = wshShell.SpecialFolders("MyDocuments")

oder Powershell:

[Environment]::GetFolderPath('MyDocuments')

Dies ist möglicherweise auch über Bash unter Windows verfügbar (wirklich!), Aber ich habe noch nicht gesehen, wie dies auf eine Weise funktioniert, die durchweg genau ist.


3

Angenommen, Sie haben Schreibzugriff auf den aktuellen Ordner oder einen bekannten Speicherort auf dem Computer. Sie können PowerShell verwenden!

Die Environment.GetFolderPathFunktion kann den Dateisystempfad bekannter Speicherorte abrufen , einschließlich des Ordners "Dokumente". Dieser PowerShell-Befehl gibt den Dokumentpfad aus:

[Environment]::GetFolderPath('MyDocuments')

Es kann mit dem Out-FileCmdlet in eine Datei geschrieben werden. Der Umleitungsoperator >funktioniert hier nicht wirklich, da er eine Unicode-Textdatei mit einer Stückliste erstellt, mit der im Stapelverarbeiter nur schwer gearbeitet werden kann.

[Environment]::GetFolderPath('MyDocuments') | Out-File 'docspath.tmp' -Encoding ascii

Diese Datei kann mit in eine Stapelvariable eingelesen werden set /p. Wenn wir alles zusammenfügen, erhalten wir dieses Batch-Skriptfragment:

powershell -Command "[Environment]::GetFolderPath('MyDocuments') | Out-File 'docspath.tmp' -Encoding ascii"
set /p DOCSPATH=< docspath.tmp
del docspath.tmp

Der Pfad zum Ordner "Dokumente" des Benutzers kann jetzt als ausgedrückt werden %DOCSPATH%.


1

Ich habe die zuverlässige Antwort. Kombination von Powershell, die die Antwort auf dos zurückgibt

for /f "delims=" %%a in ('powershell.exe -command "& {write-host $([Environment]::GetFolderPath('MyDocuments'))}"') do Set "$Value=%%a"
Echo Value received from Powershell : %$Value%

Ich wusste nicht, dass Sie einen $in einem CMD-Variablennamen verwenden können. Aber Sie wissen, dass es eine ungewöhnliche Verwendung ist, oder?
Scott

0

Nun, es ist ziemlich einfach :)

Der Speicherort des Desktop-Ordners ist hier aufgeführt:

\ HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell-Ordner

oder noch einfacher in PowerShell

$ DesktopPath = [Umgebung] :: GetFolderPath ("Desktop")

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.