Показать полную графическую версию : [решено] Изменение месторасположения пользовательских папок
Пытаюсь автоматизировать этот процесс, сменить месторасположение вот этих папок (http://s01.geekpic.net/di-ZIH3MM.png) (показано содержимое папки %UserName%, отображение на Рабочем столе которой включается в персонализации). Если зайти в свойство из одной этих папок, то на вкладке Месторасположение можно осуществить эту задачу, но мне надо сделать это автоматически.
Что я делаю. Батником перемещаю все эти (обведены красным) папки из "С:\Users\Leha" в "D:\User", в реестре:
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
правлю пути на соответствующие. Вроде бы все правильно, метод работает, но возникает нюанс, с которым я хочу разобраться и решить его. При смене месторасположения этих папок указанным мною способом, в свойствах этих папок исчезает механизм смены расположения (соответствующая вкладка), а так же в папке %UserName%, что на моем скрине, исчезают "папки/ярлыки" (не знаю, как их назвать), при открытии которых, открывается реальный каталог.
Как корректно сменить их расположение автоматически, чтобы при этом в свойствах папок не потерялся стандартный механизм смены месторасположения и при этом остались рабочие линки на эти папки в папке %UserName% (что на Рабочем столе)?
И поясните, плиз, что из себя представляют эти папки, что на моем скрине (обведены красным), это какие-то виртуальные папки (не симлинки точно)? Опять же хотелось бы знать, как создавать такие "папки" на реальные каталоги, автоматически, разумеется.
Не ожидал, что не будет ответа/решения на данный вопрос, вроде же простую процедуру пытаюсь выполнить. Или меня никто не понял? Тогда как еще понятнее расписать.
Ж.Д.А.Л.К.Е.Р.
07-02-2016, 15:28
У 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.
Я немного тупанул, сам не знаю, почему сразу так не сделал. Метод описанный выше работает, только делать это надо при выгруженном explorer.exe, тогда не будет той проблемы, о которой я выше говорил. Ну и обязательно, указывая путь в реестре, этот путь уже должен существовать, на момент запуска explorer.exe, и пользовательская папка, которую мы переносили, не должна оставаться по старому пути, иначе будут дубли в папке %UserName% (на Рабочем столе). Пишу скрипт, чтобы полностью автоматизировать сей процесс, позже выложу, может кому-то еще пригодится.
И еще вопрос. Существует ли метод "мягкой" перезагрузки/обновления оболочки/шела/экплорера, то есть без выгрузки/загрузки процесса explorer.exe (W7)? Что-то вроде того, как происходит обновление ассоциаций, но этого может быть недостаточно для моей задачи. Ведь проводник это умеет делать, хотелось бы знать, возможно ли это осуществить в командой строке (автоматически).
Существует ли возможность изменить путь "Личной папки" (%UserName%), что на Рабочем столе (вкл. в Персонализации), путь которой ведет в корень "%SystemDrive%\Users\%UserName%", то есть чтобы "Личная папка" открывала содержимой другой папки?
И еще вопрос. Существует ли метод "мягкой" перезагрузки/обновления оболочки/шела/экплорера, то есть без выгрузки/загрузки процесса explorer.exe (W7)? Что-то вроде того, как происходит обновление ассоциаций, но этого может быть недостаточно для моей задачи. Ведь проводник это умеет делать, хотелось бы знать, возможно ли это осуществить в командой строке (автоматически). »
Кроме выгрузки (убивания процесса) и его запуска я другого метода не знаю и нигде не встречал.
Существует ли возможность изменить путь "Личной папки" (%UserName%), что на Рабочем столе (вкл. в Персонализации), путь которой ведет в корень "%SystemDrive%\Users\%UserName%", то есть чтобы "Личная папка" открывала содержимой другой папки? »
По сути это системный ярлык без возможности правки стандартными средствами. Вероятней всего метод редактирования существует, через реестр. Но я к сожалению его не знаю. :dont-know
boss911, возможно здесь (http://j.mp/20PJZyE) то, что вам нужно. Если я правильно понял задачу.
popt2t
Нет, это совсем не то, подобной информации/мануала в сети много. Это перенос ВСЕЙ профильной папки пользователя, что мне совсем не нужно, хотя и решило бы мой вопрос, но совсем не так, как мне надо. Мне нужно всего лишь поменять путь, который открывает "Личная папка" (%UserName%), сама эта папка как бы не совсем папка, а некий ярлык.
Написал для себя скрипт (пакетный файл (http://www.oszone.net/2245)), автоматизирующий процесс переноса пользовательских папок в другое место, может кому-то понадобится.
В скрипте реализован метод выбора, можно перенести как одну, так и более одной папки (в Windows 7 их всего 11 штук). Чтобы перенести нужную нам папку, необходимо раскомментировать строку (убрать 'REM' в начале строки) и указать/прописать (после знака '=') предпочитаемый путь для переноса (пробелы и кириллица в пути поддерживаются). Все, что нам нужно редактировать/править в скрипте, выделено красным, остальной текст/код правим только в том случае, если понимаем, что делаем и обладаем необходимыми знаниями.
Предусмотрен запуск скрипта с ключем /RunOnce, ключ подавляет запросы и сообщения в ходе работы скрипта, а так же перезагрузку explorer.exe (необходимо для применения изменений на рабочей ОС). Данный ключ специально реализован для автоматизации процесса, для запуска из RunOnce, на данном этапе пользователь уже существует, но explorer еще не запущен, скрипт тихо отработает до загрузки Рабочего стола.
Скрипт тестировался на Windows 7, если MS ничего не поменяла в более новых ОС (не проверял), то и на них будет работать.
@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
Делал подобный скрипт для своей работы. Мой вариант проще:
@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
Мой вариант проще »
И менее надежный и универсальный. Разве что для личных нужд.
matveevich
15-11-2017, 12:01
boss911,
Спасибо. Отличный скрипт. А то приходилось всё менять ручками.
Заменил в скрипте D:\USER\ на D:\%Username%\ и теперь вообще все папки переносятся без проблем.
Скрипт сам подхватывает имя пользователя.
Отлично работает в семёрке, десятке 1607 и десятке 1709
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC