Командний рядок Windows - Отримайте переміщену папку "Документи користувача"


8

Я намагаюся написати простий пакетний сценарій, який копіює деякі файли з %userprofile%\Documentsкаталогу. Я тестую сценарій на своїй машині, але після деяких збоїв я зрозумів, що перемістив дані свого користувача в окремий розділ . Таким чином, %userprofile%\Documentsє порожнім , і (очевидно) нічого не копіюється.

Я вже пробував інші змінні середовища, такі як %homedrive%і %homepath%, але вони все ще вказують на стандартC:\...

Чи є спосіб дізнатися фактичний диск, який використовується для даних користувача?

Я використовую Windows 10.

Дякую!

EDIT

Як вказував Ƭᴇcʜιᴇ007, я не переміщував дані користувача на інший розділ, але просто перемістив "основні" папки (Документи, Відео, ...) у відповідні папки на іншому розділі: клацніть правою кнопкою миші (наприклад, ) Документи, властивості, шлях.

Як я можу дізнатися шлях до папки "Документ", яка була перемещена таким чином?


2
% userprofile% повинна мати правильну папку незалежно від того, куди ви її помістили, якщо ви правильно перемістили папки профілю, вона повинна бути точною. То як саме ви перемістили його на інший розділ?
Ƭᴇcʜιᴇ007

Гаразд, я, чесно кажучи, не пам’ятав, тому трохи переглянув, і нарешті з’ясував, що робив. Я клацнув правою кнопкою миші на "головних" папках ("Документи", "Відео" тощо), вибрав "Властивості", вибрав вкладку "Шлях" і змінив шлях. (Я використовую італійську версію Windows, і оскільки я ледве перекладаю імена, які бачу на екрані, деякі слова можуть бути різними). Отже, ви мали рацію,% userprofile% гостро нічого не робить. Але питання все ще залишається: як я можу знайти фактичний шлях до "головної" папки "Документи"?
Алессандро

Тоді я думаю, що ви плутаєте "бібліотеку" Ваших документів із папкою "Документи" у шляху вашого профілю користувача. Дві різні речі ...
Ƭᴇcʜιᴇ007

Чи є спосіб дізнатися шлях папки «Документи», враховуючи, що вона була переселена таким чином?
Алессандро

Відповіді:


5

На жаль, не існує простої змінної середовища, яку ви можете перевірити за допомогою пакетного сценарію, якщо ви перенаправили це з контуру за замовчуванням щодо вашого профілю. Повний список змінних довкілля (включаючи деякі недокументовані) ви можете побачити тут:

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

Ще одна річ, яку слід пам’ятати, - це те, що перенаправлення папок навіть дозволяє перемістити їх до загальної мережі. Не повинно бути "приводу", щоб ви могли використовувати всі; це може бути просто шлях до ООН.

Хороша новина - інформація, яку ви хочете, доступна в реєстрі за наступним місцезнаходженням:

HKEY_CURRENT_USER \ Програмне забезпечення \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Папки оболонок користувача \ Особисті

Існує цілий набір папок, за якими можна переміщатися за допомогою цього User Shell Foldersключа, але для читання тут папки "Мої документи" за допомогою Windows Batch виглядає приблизно так:

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

На моїй машині це дає наступний вихід, який може бути вам більш-менш корисним, залежно від того, що вам потрібно і наскільки ви хороші зі сценаріями пакетної роботи Windows:

HKEY_CURRENT_USER \ Програмне забезпечення \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Папки оболонок користувача
    Особистий REG_EXPAND_SZ C: \ Користувачі \ joel \ Документи

Ви також можете спробувати vbscript:

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

або Powershell:

[Environment]::GetFolderPath('MyDocuments')

Зрештою, це може бути доступне також через bash для Windows (справді!), Але я ще не бачив, як це зробити так, щоб він був постійно точним.


3

Якщо припустити, що ви маєте доступ до запису до поточної папки або до якогось відомого місця на комп'ютері ... ви можете використовувати PowerShell!

Environment.GetFolderPathФункція може отримати файл системного шляху добре відомі місць , в тому числі в папці Documents. Ця команда PowerShell друкує шлях Документи:

[Environment]::GetFolderPath('MyDocuments')

Його можна записати у файл із Out-Fileкомандлетом. Оператор перенаправлення >насправді не працює тут, оскільки він створює текстовий файл Unicode з BOM, з яким складно працювати в пакетному процесорі.

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

Цей файл можна прочитати в пакетній змінній за допомогою set /p. Збираючи все це разом, ми отримуємо цей фрагмент пакетного сценарію:

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

Шлях до папки "Документи користувача" тепер може бути виражений як %DOCSPATH%.


0

Ну це досить просто :)

Розташування робочої папки вказано тут:

\ HKEY_CURRENT_USER \ Програмне забезпечення \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Папки оболонки

або ще простіше в PowerShell

$ DesktopPath = [Навколишнє середовище] :: GetFolderPath ("Desktop")


0

У мене є достовірна відповідь. Поєднання оболонки повноважень, яка повертає відповідь до дос

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

Я не знав, що ви можете використовувати $ім'я змінної CMD. Але ви знаєте, що це звичайне використання, правда?
Скотт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.