8

Я пытаюсь написать простой пакетный скрипт, который копирует некоторые файлы из %userprofile%\Documents . Я тестирую скрипт на своем компьютере, но после некоторых сбоев я понял, что перенес данные своего пользователя в отдельный раздел . Следовательно, %userprofile%\Documents пуст и (очевидно) ничего не копируется.

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

Есть ли способ узнать фактический диск, используемый для данных пользователя?

Я использую Windows 10.

Спасибо!

РЕДАКТИРОВАТЬ

Как отметил Ƭᴇcʜιᴇ007, я не перемещал данные пользователя в другой раздел, а просто переместил "основные" папки ("Документы", "Видео", ...) в некоторые соответствующие папки в другом разделе: щелкните правой кнопкой мыши (например ) Документы, Свойства, Путь.

Как я могу узнать путь к папке с документами, которая была перемещена таким образом?

3 ответа3

5

К сожалению, нет простой переменной среды, которую вы можете проверить из пакетного скрипта, перенаправили ли вы ее из пути по умолчанию относительно вашего профиля. Вы можете увидеть полный список переменных среды (включая некоторые недокументированные) здесь:

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

Следует также помнить, что перенаправление папок позволяет даже перемещать их в общий сетевой ресурс. Там не должно быть "диск", который вы можете использовать все; это может быть просто путь UNC.

Хорошей новостью является то, что информация, которую вы хотите, доступна в реестре по следующему адресу:

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\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
    Personal    REG_EXPAND_SZ    C:\Users\joel\Documents

Вы также можете попробовать vbscript:

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

или Powershell:

[Environment]::GetFolderPath('MyDocuments')

Это может в конечном итоге быть доступно через bash в Windows, тоже (правда!), Но я пока не видел, как это сделать так, чтобы это было неизменно точно.

3

Предполагая, что у вас есть права на запись в текущую папку или в какое-либо известное место на компьютере ... вы можете использовать PowerShell!

Environment.GetFolderPath может получить путь к файловой системе известных мест, включая папку «Документы». Эта команда PowerShell печатает путь к документам:

[Environment]::GetFolderPath('MyDocuments')

Его можно записать в файл с помощью командлета Out-File . Оператор перенаправления > здесь не работает, потому что он создает текстовый файл Unicode с спецификацией, с которой трудно работать в пакетном процессоре.

[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 = [Environment]::GetFolderPath("Рабочий стол")

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .