Wiersz polecenia systemu Windows - Uzyskaj przeniesiony folder Dokumenty użytkownika

8

Próbuję napisać prosty skrypt wsadowy, który kopiuje niektóre pliki z %userprofile%\Documentskatalogu. Testuję skrypt na moim komputerze, ale po kilku awariach zdałem sobie sprawę, że przeniosłem dane użytkownika na osobną partycję . Dlatego %userprofile%\Documentsjest pusty i (oczywiście) nic nie jest kopiowane.

Próbowałem już innych zmiennych środowiskowych, takich jak %homedrive%i %homepath%, ale nadal wskazują one na standardC:\...

Czy istnieje sposób, aby dowiedzieć się rzeczywisty dysk używany dla danych użytkownika?

Korzystam z systemu Windows 10.

Dzięki!

EDYTOWAĆ

Jak wskazał Ƭᴇcʜιᴇ007, nie przeniosłem danych użytkownika na inną partycję, ale po prostu przeniosłem „główne” foldery (Dokumenty, Wideo, ...) do niektórych odpowiednich folderów na innej partycji: kliknij prawym przyciskiem myszy (np. ) Dokumenty, właściwości, ścieżka.

Jak mogę znaleźć ścieżkę folderu dokumentów, który został przeniesiony w ten sposób?

Alessandro
źródło
2
% userprofile% powinien mieć odpowiedni folder bez względu na to, gdzie go umieścisz, o ile poprawnie przeniesiesz foldery profilu, powinien być dokładny. Jak dokładnie przeniosłeś go na inną partycję?
Ƭᴇcʜιᴇ007
Ok, szczerze mówiąc, nie pamiętam, więc trochę przejrzałem i w końcu dowiedziałem się, co zrobiłem. Kliknąłem prawym przyciskiem myszy na „główne” foldery (dokumenty, filmy itp.), Wybrałem Właściwości, wybrałem zakładkę Ścieżka i zmieniłem ścieżkę. (Używam włoskiej wersji systemu Windows, a ponieważ ledwo tłumaczę nazwy widoczne na ekranie, niektóre słowa mogą być inne). Więc masz rację,% userprofile% ostro nie robi nic złego. Ale pytanie wciąż pozostaje: jak znaleźć rzeczywistą ścieżkę do „głównego” folderu Dokumentów?
Alessandro,
Więc myślę, że mylisz swoją „bibliotekę” Dokumentów z folderem Dokumenty na ścieżce profilu użytkownika. Dwie różne rzeczy ...
ᴇcʜιᴇ007
Czy istnieje sposób na znalezienie ścieżki do folderu Dokumenty, biorąc pod uwagę, że został on przeniesiony w ten sposób?
Alessandro,

Odpowiedzi:

5

Niestety, nie ma prostej zmiennej środowiskowej, którą można sprawdzić ze skryptu wsadowego, jeśli przekierowano ją z domyślnej ścieżki względem swojego profilu. Możesz zobaczyć pełną listę zmiennych środowiskowych (w tym niektóre nieudokumentowane) tutaj:

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

Inną rzeczą, o której należy pamiętać, jest to, że przekierowanie folderów pozwala nawet przenieść je do udziału sieciowego. Nie musi istnieć „dysk”, z którego można korzystać wszystkie; może to być po prostu ścieżka UNC.

Dobrą wiadomością jest to, że potrzebne informacje są dostępne w rejestrze w następującej lokalizacji:

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ User Shell Folders \ Personal

Istnieje cały zestaw folderów, które można przenosić w tym User Shell Folderskluczu, ale aby przeczytać tutaj folder Moje dokumenty za pomocą usługi Windows Batch, wygląda to tak:

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

Na moim komputerze generuje to następujące dane wyjściowe, które mogą być mniej lub bardziej przydatne w zależności od tego, czego potrzebujesz i od tego, jak dobry jesteś ze skryptami Windows Batch:

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ User Shell Folders
    Osobiste REG_EXPAND_SZ C: \ Users \ joel \ Documents

Możesz także wypróbować vbscript:

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

lub PowerShell:

[Environment]::GetFolderPath('MyDocuments')

Może to być ostatecznie dostępne także przez bash na Windowsie (naprawdę!), Ale nie widziałem jeszcze, jak to zrobić w sposób, który będzie konsekwentnie dokładny.

Joel Coehoorn
źródło
3

Zakładając, że masz dostęp do zapisu w bieżącym folderze lub w pewnej znanej istniejącej lokalizacji na komputerze ... możesz użyć programu PowerShell!

Environment.GetFolderPathFunkcji można uzyskać ścieżkę systemu plików znanych miejscach , w tym w folderze Dokumenty. To polecenie PowerShell drukuje ścieżkę dokumentów:

[Environment]::GetFolderPath('MyDocuments')

Można go zapisać do pliku za pomocą polecenia Out-Filecmdlet. Operator przekierowania >tak naprawdę tu nie działa, ponieważ tworzy plik tekstowy Unicode z zestawieniem komponentów, co jest trudne do pracy w procesorze wsadowym.

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

Ten plik można wczytać do zmiennej wsadowej za pomocą set /p. Podsumowując, otrzymujemy ten fragment skryptu wsadowego:

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

Ścieżkę do folderu Dokumenty użytkownika można teraz wyrazić jako %DOCSPATH%.

Ben N.
źródło
1

Mam wiarygodną odpowiedź. Kombinacja PowerShell, która zwraca odpowiedź na dos

for /f "delims=" %%a in ('powershell.exe -command "& {write-host $([Environment]::GetFolderPath('MyDocuments'))}"') do Set "$Value=%%a"
Echo Value received from Powershell : %$Value%
dcshoecomp
źródło
Nie wiedziałem, że można użyć $w nazwie zmiennej CMD. Ale wiesz, że to rzadkie użycie, prawda?
Scott
0

Cóż, to całkiem proste :)

Lokalizacja folderu pulpitu znajduje się tutaj:

\ HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folders

lub nawet prościej w PowerShell

$ DesktopPath = [Środowisko] :: GetFolderPath („Desktop”)

integratorIT
źródło