Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista (http://forum.oszone.net/forumdisplay.php?f=83)
-   -   [решено] Изменение месторасположения пользовательских папок (http://forum.oszone.net/showthread.php?t=311094)

boss911 02-02-2016 16:52 2601783

Изменение месторасположения пользовательских папок
 
Пытаюсь автоматизировать этот процесс, сменить месторасположение вот этих папок (показано содержимое папки %UserName%, отображение на Рабочем столе которой включается в персонализации). Если зайти в свойство из одной этих папок, то на вкладке Месторасположение можно осуществить эту задачу, но мне надо сделать это автоматически.

Что я делаю. Батником перемещаю все эти (обведены красным) папки из "С:\Users\Leha" в "D:\User", в реестре:
Код:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

правлю пути на соответствующие. Вроде бы все правильно, метод работает, но возникает нюанс, с которым я хочу разобраться и решить его. При смене месторасположения этих папок указанным мною способом, в свойствах этих папок исчезает механизм смены расположения (соответствующая вкладка), а так же в папке %UserName%, что на моем скрине, исчезают "папки/ярлыки" (не знаю, как их назвать), при открытии которых, открывается реальный каталог.

Как корректно сменить их расположение автоматически, чтобы при этом в свойствах папок не потерялся стандартный механизм смены месторасположения и при этом остались рабочие линки на эти папки в папке %UserName% (что на Рабочем столе)?

И поясните, плиз, что из себя представляют эти папки, что на моем скрине (обведены красным), это какие-то виртуальные папки (не симлинки точно)? Опять же хотелось бы знать, как создавать такие "папки" на реальные каталоги, автоматически, разумеется.

boss911 06-02-2016 12:27 2603067

Не ожидал, что не будет ответа/решения на данный вопрос, вроде же простую процедуру пытаюсь выполнить. Или меня никто не понял? Тогда как еще понятнее расписать.

Ж.Д.А.Л.К.Е.Р. 07-02-2016 15:28 2603368

У TeraByte Unlimited есть скрипт moveuser.tbs, может это то что тебе нужно:
Цитата:

// This script is used to relocate Users folders of Windows from one drive to
// another.
// This script can be run under Windows, DOS or Linux. It can either relocate
// Users of a running System, or of a non-running one.
// When the amount of datas to move/copy is huge, then the User's folder may
// first be copied before running the script. In that case, the script can
// then copy the missing files (like the protected ones), or just relocate
// the User without copying any files.

boss911 08-02-2016 12:20 2603668

Я немного тупанул, сам не знаю, почему сразу так не сделал. Метод описанный выше работает, только делать это надо при выгруженном explorer.exe, тогда не будет той проблемы, о которой я выше говорил. Ну и обязательно, указывая путь в реестре, этот путь уже должен существовать, на момент запуска explorer.exe, и пользовательская папка, которую мы переносили, не должна оставаться по старому пути, иначе будут дубли в папке %UserName% (на Рабочем столе). Пишу скрипт, чтобы полностью автоматизировать сей процесс, позже выложу, может кому-то еще пригодится.

И еще вопрос. Существует ли метод "мягкой" перезагрузки/обновления оболочки/шела/экплорера, то есть без выгрузки/загрузки процесса explorer.exe (W7)? Что-то вроде того, как происходит обновление ассоциаций, но этого может быть недостаточно для моей задачи. Ведь проводник это умеет делать, хотелось бы знать, возможно ли это осуществить в командой строке (автоматически).

boss911 10-02-2016 17:20 2604610

Существует ли возможность изменить путь "Личной папки" (%UserName%), что на Рабочем столе (вкл. в Персонализации), путь которой ведет в корень "%SystemDrive%\Users\%UserName%", то есть чтобы "Личная папка" открывала содержимой другой папки?

Anton04 11-02-2016 21:36 2605137

Цитата:

Цитата boss911
И еще вопрос. Существует ли метод "мягкой" перезагрузки/обновления оболочки/шела/экплорера, то есть без выгрузки/загрузки процесса explorer.exe (W7)? Что-то вроде того, как происходит обновление ассоциаций, но этого может быть недостаточно для моей задачи. Ведь проводник это умеет делать, хотелось бы знать, возможно ли это осуществить в командой строке (автоматически). »

Кроме выгрузки (убивания процесса) и его запуска я другого метода не знаю и нигде не встречал.

Цитата:

Цитата boss911
Существует ли возможность изменить путь "Личной папки" (%UserName%), что на Рабочем столе (вкл. в Персонализации), путь которой ведет в корень "%SystemDrive%\Users\%UserName%", то есть чтобы "Личная папка" открывала содержимой другой папки? »

По сути это системный ярлык без возможности правки стандартными средствами. Вероятней всего метод редактирования существует, через реестр. Но я к сожалению его не знаю. :dont-know

popt2t 12-02-2016 13:58 2605400

boss911, возможно здесь то, что вам нужно. Если я правильно понял задачу.

boss911 12-02-2016 17:05 2605470

popt2t

Нет, это совсем не то, подобной информации/мануала в сети много. Это перенос ВСЕЙ профильной папки пользователя, что мне совсем не нужно, хотя и решило бы мой вопрос, но совсем не так, как мне надо. Мне нужно всего лишь поменять путь, который открывает "Личная папка" (%UserName%), сама эта папка как бы не совсем папка, а некий ярлык.

boss911 16-02-2016 09:30 2606602

Написал для себя скрипт (пакетный файл), автоматизирующий процесс переноса пользовательских папок в другое место, может кому-то понадобится.

В скрипте реализован метод выбора, можно перенести как одну, так и более одной папки (в Windows 7 их всего 11 штук). Чтобы перенести нужную нам папку, необходимо раскомментировать строку (убрать 'REM' в начале строки) и указать/прописать (после знака '=') предпочитаемый путь для переноса (пробелы и кириллица в пути поддерживаются). Все, что нам нужно редактировать/править в скрипте, выделено красным, остальной текст/код правим только в том случае, если понимаем, что делаем и обладаем необходимыми знаниями.

Предусмотрен запуск скрипта с ключем /RunOnce, ключ подавляет запросы и сообщения в ходе работы скрипта, а так же перезагрузку explorer.exe (необходимо для применения изменений на рабочей ОС). Данный ключ специально реализован для автоматизации процесса, для запуска из RunOnce, на данном этапе пользователь уже существует, но explorer еще не запущен, скрипт тихо отработает до загрузки Рабочего стола.

Скрипт тестировался на Windows 7, если MS ничего не поменяла в более новых ОС (не проверял), то и на них будет работать.

UserShellFoldersMove.cmd

Код:

@Echo off
TITLE User Shell Folders Move
SETLOCAL EnableDelayedExpansion
MODE CON COLS=65 LINES=14

CHCP 1251 1>nul
::~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

REM SET "Desktop=D:\%UserName%\Desktop"
REM SET "Favorites=D:\%UserName%\Favorites"
REM SET "MyMusic=D:\%UserName%\Music"
REM SET "MyPictures=D:\%UserName%\Pictures"
REM SET "MyVideo=D:\%UserName%\Videos"
REM SET "Personal=D:\%UserName%\Documents"
REM SET "Downloads=D:\%UserName%\Downloads"
REM SET "SavedGames=D:\%UserName%\Saved Games"
REM SET "Contacts=D:\%UserName%\Contacts"
REM SET "Searches=D:\%UserName%\Searches"
REM SET "Links=D:\%UserName%\Links"

::~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CHCP 866 1>nul

FOR %%I IN (%*) DO IF /I "%%I"=="/RunOnce" SET RunOnce=Yes

IF NOT "%RunOnce%"=="Yes" (
  ECHO. & ECHO Do you agree to move user folders?
  ECHO. & PAUSE & CLS
)

SET "ShellFolders=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
SET "UserShellFolders=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"

IF NOT "%RunOnce%"=="Yes" (TASKKILL >nul /F /IM explorer.exe)

IF DEFINED Desktop (
  ECHO Go move "Desktop"...
  FOR /F "Tokens=2*" %%I IN ('REG QUERY "%ShellFolders%" /V "Desktop" 2^>nul ^| FIND "REG_SZ"') DO CALL SET SrcDesktop=%%J
  REM DEL >nul 2>&1 /Q /ASH "!SrcDesktop!\desktop.ini"
  MD 2>nul "%Desktop%"
  XCOPY >nul 2>&1 /E /V /C /I /Q /H /R /K /Y "!SrcDesktop!" "%Desktop%"
  IF NOT ERRORLEVEL 4 RD >nul 2>&1 /S /Q "!SrcDesktop!"
)
IF DEFINED Favorites (
  ECHO Go move "Favorites"...
  FOR /F "Tokens=2*" %%I IN ('REG QUERY "%ShellFolders%" /V "Favorites" 2^>nul ^| FIND "REG_SZ"') DO CALL SET SrcFavorites=%%J
  REM DEL >nul 2>&1 /Q /ASH "!SrcFavorites!\desktop.ini"
  MD 2>nul "%Favorites%"
  XCOPY >nul 2>&1 /E /V /C /I /Q /H /R /K /Y "!SrcFavorites!" "%Favorites%"
  IF NOT ERRORLEVEL 4 RD >nul 2>&1 /S /Q "!SrcFavorites!"
)
IF DEFINED MyMusic (
  ECHO Go move "Music"...
  FOR /F "Tokens=3*" %%I IN ('REG QUERY "%ShellFolders%" /V "My Music" 2^>nul ^| FIND "REG_SZ"') DO CALL SET SrcMyMusic=%%J
  REM DEL >nul 2>&1 /Q /ASH "!SrcMyMusic!\desktop.ini"
  MD 2>nul "%MyMusic%"
  XCOPY >nul 2>&1 /E /V /C /I /Q /H /R /K /Y "!SrcMyMusic!" "%MyMusic%"
  IF NOT ERRORLEVEL 4 RD >nul 2>&1 /S /Q "!SrcMyMusic!"
)
IF DEFINED MyPictures (
  ECHO Go move "Pictures"...
  FOR /F "Tokens=3*" %%I IN ('REG QUERY "%ShellFolders%" /V "My Pictures" 2^>nul ^| FIND "REG_SZ"') DO CALL SET SrcMyPictures=%%J
  REM DEL >nul 2>&1 /Q /ASH "!SrcMyPictures!\desktop.ini"
  MD 2>nul "%MyPictures%"
  XCOPY >nul 2>&1 /E /V /C /I /Q /H /R /K /Y "!SrcMyPictures!" "%MyPictures%"
  IF NOT ERRORLEVEL 4 RD >nul 2>&1 /S /Q "!SrcMyPictures!"
)
IF DEFINED MyVideo (
  ECHO Go move "Videos"...
  FOR /F "Tokens=3*" %%I IN ('REG QUERY "%ShellFolders%" /V "My Video" 2^>nul ^| FIND "REG_SZ"') DO CALL SET SrcMyVideo=%%J
  REM DEL >nul 2>&1 /Q /ASH "!SrcMyVideo!\desktop.ini"
  MD 2>nul "%MyVideo%"
  XCOPY >nul 2>&1 /E /V /C /I /Q /H /R /K /Y "!SrcMyVideo!" "%MyVideo%"
  IF NOT ERRORLEVEL 4 RD >nul 2>&1 /S /Q "!SrcMyVideo!"
)
IF DEFINED Personal (
  ECHO Go move "Documents"...
  FOR /F "Tokens=2*" %%I IN ('REG QUERY "%ShellFolders%" /V "Personal" 2^>nul ^| FIND "REG_SZ"') DO CALL SET SrcPersonal=%%J
  REM DEL >nul 2>&1 /Q /ASH "!SrcPersonal!\desktop.ini"
  MD 2>nul "%Personal%"
  XCOPY >nul 2>&1 /E /V /C /I /Q /H /R /K /Y "!SrcPersonal!" "%Personal%"
  IF NOT ERRORLEVEL 4 RD >nul 2>&1 /S /Q "!SrcPersonal!"
)
IF DEFINED Downloads (
  ECHO Go move "Downloads"...
  FOR /F "Tokens=2*" %%I IN ('REG QUERY "%ShellFolders%" /V "{374DE290-123F-4565-9164-39C4925E467B}" 2^>nul ^| FIND "REG_SZ"') DO CALL SET SrcDownloads=%%J
  REM DEL >nul 2>&1 /Q /ASH "!SrcDownloads!\desktop.ini"
  MD 2>nul "%Downloads%"
  XCOPY >nul 2>&1 /E /V /C /I /Q /H /R /K /Y "!SrcDownloads!" "%Downloads%"
  IF NOT ERRORLEVEL 4 RD >nul 2>&1 /S /Q "!SrcDownloads!"
)
IF DEFINED SavedGames (
  ECHO Go move "Saved Games"...
  FOR /F "Tokens=2*" %%I IN ('REG QUERY "%ShellFolders%" /V "{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}" 2^>nul ^| FIND "REG_SZ"') DO CALL SET SrcSavedGames=%%J
  REM DEL >nul 2>&1 /Q /ASH "!SrcSavedGames!\desktop.ini"
  MD 2>nul "%SavedGames%"
  XCOPY >nul 2>&1 /E /V /C /I /Q /H /R /K /Y "!SrcSavedGames!" "%SavedGames%"
  IF NOT ERRORLEVEL 4 RD >nul 2>&1 /S /Q "!SrcSavedGames!"
)
IF DEFINED Contacts (
  ECHO Go move "Contacts"...
  FOR /F "Tokens=2*" %%I IN ('REG QUERY "%ShellFolders%" /V "{56784854-C6CB-462B-8169-88E350ACB882}" 2^>nul ^| FIND "REG_SZ"') DO CALL SET SrcContacts=%%J
  REM DEL >nul 2>&1 /Q /ASH "!SrcContacts!\desktop.ini"
  MD 2>nul "%Contacts%"
  XCOPY >nul 2>&1 /E /V /C /I /Q /H /R /K /Y "!SrcContacts!" "%Contacts%"
  IF NOT ERRORLEVEL 4 RD >nul 2>&1 /S /Q "!SrcContacts!"
)
IF DEFINED Searches (
  ECHO Go move "Searches"...
  FOR /F "Tokens=2*" %%I IN ('REG QUERY "%ShellFolders%" /V "{7D1D3A04-DEBB-4115-95CF-2F29DA2920DA}" 2^>nul ^| FIND "REG_SZ"') DO CALL SET SrcSearches=%%J
  REM DEL >nul 2>&1 /Q /ASH "!SrcSearches!\desktop.ini"
  MD 2>nul "%Searches%"
  XCOPY >nul 2>&1 /E /V /C /I /H /R /K /Y "!SrcSearches!" "%Searches%"
  IF NOT ERRORLEVEL 4 RD >nul 2>&1 /S /Q "!SrcSearches!"
)
IF DEFINED Links (
  ECHO Go move "Links"...
  FOR /F "Tokens=3" %%I IN ('REG QUERY "%ShellFolders%" /V "{BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}" 2^>nul ^| FIND "REG_SZ"') DO CALL SET SrcLinks=%%I
  REM DEL >nul 2>&1 /Q /ASH "!SrcLinks!\desktop.ini"
  MD 2>nul "%Links%"
  XCOPY >nul 2>&1 /E /V /C /I /H /R /K /Y "!SrcLinks!" "%Links%"
  IF NOT ERRORLEVEL 4 RD >nul 2>&1 /S /Q "!SrcLinks!"
)


FOR %%I IN ("%ShellFolders%" "%UserShellFolders%") DO (
  IF %%I=="%ShellFolders%" (SET TYPE=REG_SZ) ELSE (SET TYPE=REG_EXPAND_SZ)
  IF DEFINED Desktop        REG >nul 2>&1 ADD %%I /F /V "Desktop" /T !TYPE! /D "%Desktop%"
  IF DEFINED Favorites        REG >nul 2>&1 ADD %%I /F /V "Favorites" /T !TYPE! /D "%Favorites%"
  IF DEFINED MyMusic        REG >nul 2>&1 ADD %%I /F /V "My Music" /T !TYPE! /D "%MyMusic%"
  IF DEFINED MyPictures REG >nul 2>&1 ADD %%I /F /V "My Pictures" /T !TYPE! /D "%MyPictures%"
  IF DEFINED MyVideo        REG >nul 2>&1 ADD %%I /F /V "My Video" /T !TYPE! /D "%MyVideo%"
  IF DEFINED Personal        REG >nul 2>&1 ADD %%I /F /V "Personal" /T !TYPE! /D "%Personal%"
  IF DEFINED Downloads        REG >nul 2>&1 ADD %%I /F /V "{374DE290-123F-4565-9164-39C4925E467B}" /T !TYPE! /D "%Downloads%"
  IF DEFINED SavedGames REG >nul 2>&1 ADD %%I /F /V "{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}" /T !TYPE! /D "%SavedGames%"
  IF DEFINED Contacts        REG >nul 2>&1 ADD %%I /F /V "{56784854-C6CB-462B-8169-88E350ACB882}" /T !TYPE! /D "%Contacts%"
  IF DEFINED Searches        REG >nul 2>&1 ADD %%I /F /V "{7D1D3A04-DEBB-4115-95CF-2F29DA2920DA}" /T !TYPE! /D "%Searches%"
  IF DEFINED Links        REG >nul 2>&1 ADD %%I /F /V "{BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}" /T !TYPE! /D "%Links%"
)


IF NOT "%RunOnce%"=="Yes" (
  START explorer.exe
  ECHO. & PAUSE
)


EXIT


osmaster 30-10-2017 17:37 2774343

Делал подобный скрипт для своей работы. Мой вариант проще:
Код:

@ECHO OFF
TITLE User data transfer
XCOPY %USERPROFILE%\Desktop D:\Desktop /S /I /Q /H /K /O /Y
XCOPY %USERPROFILE%\Documents D:\Documents /S /I /Q /H /K /O /Y
XCOPY %USERPROFILE%\Downloads D:\Downloads /S /I /Q /H /K /O /Y
XCOPY %USERPROFILE%\Music D:\Music /S /I /Q /H /K /O /Y
XCOPY %USERPROFILE%\Pictures D:\Pictures /S /I /Q /H /K /O /Y
XCOPY %USERPROFILE%\Videos D:\Videos /S /I /Q /H /K /O /Y
MD D:\Desktop
MD D:\Documents
MD D:\Downloads
MD D:\Music
MD D:\Pictures
MD D:\Videos
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Desktop /t REG_SZ /d D:\Desktop /f
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Personal /t REG_SZ /d D:\Documents /f
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v {374DE290-123F-4565-9164-39C4925E467B} /t REG_SZ /d D:\Downloads /f
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Music" /t REG_SZ /d D:\Music /f
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Pictures" /t REG_SZ /d D:\Pictures /f
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Video" /t REG_SZ /d D:\Videos /f
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop /t REG_EXPAND_SZ /d D:\Desktop /f
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal /t REG_EXPAND_SZ /d D:\Documents /f
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v {374DE290-123F-4565-9164-39C4925E467B} /t REG_EXPAND_SZ /d D:\Downloads /f
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "My Music" /t REG_EXPAND_SZ /d D:\Music /f
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "My Pictures" /t REG_EXPAND_SZ /d D:\Pictures /f
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "My Video" /t REG_EXPAND_SZ /d D:\Videos /f
RD /S /Q %USERPROFILE%\Desktop
RD /S /Q %USERPROFILE%\Documents
RD /S /Q %USERPROFILE%\Downloads
RD /S /Q %USERPROFILE%\Music
RD /S /Q %USERPROFILE%\Pictures
RD /S /Q %USERPROFILE%\Videos
PAUSE


boss911 30-10-2017 22:46 2774433

Цитата:

Цитата osmaster
Мой вариант проще »

И менее надежный и универсальный. Разве что для личных нужд.

matveevich 15-11-2017 12:01 2777711

boss911,
Спасибо. Отличный скрипт. А то приходилось всё менять ручками.
Заменил в скрипте D:\USER\ на D:\%Username%\ и теперь вообще все папки переносятся без проблем.
Скрипт сам подхватывает имя пользователя.
Отлично работает в семёрке, десятке 1607 и десятке 1709


Время: 22:02.

Время: 22:02.
© OSzone.net 2001-