Avatar

vedmed

@vedmed

с нами 17 лет 8 месяцев 5 дней
Онлайн 8 лет назад

Попалась мне сетка, где без домена в однораногвой сети люди попытались сделать централизованное хранение данных…

Попалась мне сетка, где без домена в однораногвой сети люди попытались сделать централизованное хранение данных. Делали они это там в ручную правя реестр и зачем-то организуя персональную шару для каждого юзера. Сейчас занимаюсь переводом всего этого в домен, но из спортивного интереса решил
облегчить подобное решение. Мало ли кому пригодится, если по каким то соображениям домен не подять. В результате просветления мозгов светлым пивом родился скрипт. Скрипт переносит папки Мои документы, Рабочий стол, Application Data, Мои рисунки и Моя Музыка на машину-сервер.
Вобщем детали понятны из коментариев в тексте скрипта. Скрипт должен быть сохранён в кодировке
CP866 — это критично. Так же обратить внимание следует на табуляую (в коментах скрипта указано)
собственно скрипт
=========== Folders.cmd start ============

@Echo off
:: Cкрипт должен быть сохранён в кодировке CP866!
:: CъЁшяЄ фюыцхэ с√Є№ ёюїЁрэ╕э т ъюфшЁютъх CP866!
:: Предполагается, что На сервере есть папочка типа \\SERVER\Share, в которой 
:: юзер может создавать папки и быть в них хозяином.
:: Также предполагается что юзер является админом на машине на момент 
:: выполнения скрипта (хотя это по идее это не обязательно). 
:: Скрипт должен исполняться под акаунтом юзера.
:: Буква диска Q: должна быть свободной — то есть нет такого диска. 
:: Если занята — правим скрипт.
:: Также предполагается что на момент запуска скрипта выгружено всё что можно.
:: И желательно подчищен автозапуск.
:: Папки Мои документы, Рабочий стол и Application Data переносятся в папку
:: \\SERVER\Share\%UserName%



:: Задаём полное имя шары
set ShareName=\\STORE\leftusers


::Узнаем старые папки пользователя
set KEY=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

::Играем с кодировками ибо в реестре 1251, а из командной строки понимается 866
chcp 1251 >nul

::Между delims= и кавычкой — символ табуляции, а не куча пробелов ;-)
For /F «Tokens=2* delims=	» %%I In ('Reg Query «%KEY%» /V Personal') Do Set Old_MyDoc=%%J
For /F «Tokens=2* delims=	» %%I In ('Reg Query «%KEY%» /V AppData') Do Set Old_AppData=%%J
For /F «Tokens=2* delims=	» %%I In ('Reg Query «%KEY%» /V DeskTop') Do Set Old_Desktop=%%J
:: До кучи обрабатываем картинки и музыку, хотя в XP они и так в документых.
For /F «Tokens=2* delims=	» %%I In ('Reg Query «%KEY%» /V «My Pictures»') Do Set Old_Pics=%%J
For /F «Tokens=2* delims=	» %%I In ('Reg Query «%KEY%» /V «My Music»') Do Set Old_Music=%%J

chcp 866 >nul


::Поскольку есть шанс что, что-то залочено ,собенно в Aplication Data,
:: сразу не копируем а формируем скрипт
echo @echo off > %SystemDrive%\copy_folders.cmd
echo net use Q: %ShareName% >> %SystemDrive%\copy_folders.cmd
echo xcopy /S /H /E «%Old_MyDoc%\*» «Q:\%UserName%\Documents\*» >> %SystemDrive%\copy_folders.cmd
echo xcopy /S /H /E «%Old_AppData%\*» «Q:\%UserName%\AppData\*» >> %SystemDrive%\copy_folders.cmd
echo xcopy /S /H /E «%Old_Desktop%\*» «Q:\%UserName%\Desktop\*» >> %SystemDrive%\copy_folders.cmd

echo xcopy /S /H /E /Y «%Old_Pics%\*» «Q:\%UserName%\%Old_MyDoc%\Мои рисунки\*» >> %SystemDrive%\copy_folders.cmd
echo xcopy /S /H /E /Y «%Old_Music%\*» «Q:\%UserName%\%Old_MyDoc%\Моя музыка\*» >> %SystemDrive%\copy_folders.cmd

echo net use Q: /d >> %SystemDrive%\copy_folders.cmd

echo echo Готово. >>%SystemDrive%\copy_folders.cmd

echo echo Копирование папок завершено. >>%SystemDrive%\copy_folders.cmd
echo set /p answer=Удалить этот временный скрипт (y/N)? >>%SystemDrive%\copy_folders.cmd
echo if /I  '%%answer%%'=='Y'   del %%0  >>%SystemDrive%\copy_folders.cmd

echo pause >> %SystemDrive%\copy_folders.cmd
echo exit >> %SystemDrive%\copy_folders.cmd

:: И запихиваем скрипт в RunOnce для юзера

reg add «HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce» /v «CopyUserFolders» /d «%SystemDrive%\copy_folders.cmd» /f

::Прописываем новые папки
:: Я идиот и не знаю что главнее 'Shell Folders' или 'User Shell Folders'
:: Поэтому правим и то и другое.

set KEY=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
reg add  «%KEY%»  /v «AppData»  /t REG_EXPAND_SZ  /d «%ShareName%\%%UserName%%\AppData» /f
reg add  «%KEY%»  /v «Desktop»  /t REG_EXPAND_SZ  /d «%ShareName%\%%UserName%%\Desktop»   /f
reg add  «%KEY%»  /v «Personal» /t REG_EXPAND_SZ  /d «%ShareName%\%%UserName%%\Documents»  /f
reg add  «%KEY%»  /v «My Pictures» /t REG_EXPAND_SZ /d «%ShareName%\%%UserName%%\Documents\Мои рисунки» /f
reg add  «%KEY%»  /v «My Music» /t REG_EXPAND_SZ /d «%ShareName%\%%UserName%%\Documents\Моя Музыка» /f

set KEY=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
reg add  «%KEY%»  /v «AppData» /d «%ShareName%\%UserName%\AppData» /f
reg add  «%KEY%»  /v «Desktop» /d «%ShareName%\%UserName%\Desktop»  /f
reg add  «%KEY%»  /v «Personal» /d «%ShareName%\%UserName%\Documents»  /f
reg add  «%KEY%»  /v «My Pictures» /d «%ShareName%\%UserName%\Documents\Мои рисунки» /f

:: Пауза для порядка и логаут
Echo Cеанс будет завершён. Перенос продолжится после релогона.
pause
shutdown -l -f -t 01

Сделано с NoNaMe
© 2000-2026