#NoTrayIcon
#RequireAdmin
#include <AutoItConstants.au3>
#include <WinAPIFiles.au3>
#Include <WinAPIShellEx.au3>
_WinAPI_Wow64EnableWow64FsRedirection(False)
Global $sDisk = 'D:'
Global $sRegKey1 = 'HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer'
Global $sRegKey2 = 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer'
Global $sScriptDir = _ScriptDir() ; $sScriptDir далее можно использовать как замену @ScriptDir
Global $aDisks = DriveGetDrive($DT_FIXED)
If $aDisks[0] > 1 Then
;1 Это диск С как правило - системный, поэтому обходим его.
For $i = 2 To $aDisks[0]
If $aDisks[$i] = $sDisk Then
_Main()
Exit
ElseIf MsgBox(36, 'Внимание', 'Перенести пользовательские папки на диск ' & StringUpper($aDisks[$i]) & '\?') = 6 Then
$sDisk = $aDisks[$i]
_Main()
Exit
Else
ExitLoop
EndIf
Next
EndIf
;Копирование личных папок и файлов в (C:\Users\mrgeo).
DirCopy($sScriptDir & '\USFOLDERS', @UserProfileDir, 1)
Func _Main()
Local $aExplorer = WinList('[CLASS:CabinetWClass]')
For $i = 1 To UBound($aExplorer) - 1
WinClose($aExplorer[$i][1])
Next
BlockInput(1)
SplashTextOn('Выполнение...', 'Подождите выполняется работа скрипта...', 250, 100, -1, -1, $DLG_TEXTVCENTER, 'Arial', 9)
;Перемещение папок: Загрузки, Мои видеозаписи, Мои документы, Мои изображения, Моя музыка, Рабочий стол и Сохраненные игры на другой диск.
_XCopy(@UserProfileDir & '\Downloads', $sDisk & '\Downloads')
_XCopy(@UserProfileDir & '\Music', $sDisk & '\Music')
_XCopy(@UserProfileDir & '\Pictures', $sDisk & '\Pictures')
_XCopy(@UserProfileDir & '\Saved Games', $sDisk & '\Saved Games')
_XCopy(@UserProfileDir & '\Videos', $sDisk & '\Videos')
_RegAdd($sRegKey1, 'Shell Folders', 'User Shell Folders', '{374DE290-123F-4565-9164-39C4925E467B}', $sDisk & '\Downloads')
_RegAdd($sRegKey1, 'Shell Folders', 'User Shell Folders', 'My Music', $sDisk & '\Music')
_RegAdd($sRegKey1, 'Shell Folders', 'User Shell Folders', 'My Pictures', $sDisk & '\Pictures')
_RegAdd($sRegKey1, 'Shell Folders', 'User Shell Folders', '{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}', $sDisk & '\Saved Games')
_RegAdd($sRegKey1, 'Shell Folders', 'User Shell Folders', 'My Video', $sDisk & '\Videos')
_RD(@UserProfileDir & '\Downloads')
_RD(@UserProfileDir & '\Music')
_RD(@UserProfileDir & '\Pictures')
_RD(@UserProfileDir & '\Saved Games')
_RD(@UserProfileDir & '\Videos')
_XCopy(@UserProfileDir & '\Desktop', $sDisk & '\Desktop')
_XCopy(@UserProfileDir & '\Documents', $sDisk & '\Documents')
_RegAdd($sRegKey1, 'Shell Folders', 'User Shell Folders', 'Desktop', $sDisk & '\Desktop')
_RegAdd($sRegKey1, 'Shell Folders', 'User Shell Folders', 'Personal', $sDisk & '\Documents')
_RegAdd($sRegKey2, 'DocFolderPaths', '', @UserName, $sDisk & '\Documents')
_RD(@UserProfileDir & '\Desktop')
_RD(@UserProfileDir & '\Documents')
;Создание символьных ссылок в папке профиля (C:\Users\mrgeo) + Добавление атрибутов "Скрытый\Системный" для символьных ссылок.
_MKLink(@UserProfileDir & '\Downloads', $sDisk & '\Downloads')
_MKLink(@UserProfileDir & '\Music', $sDisk & '\Music')
_MKLink(@UserProfileDir & '\Pictures', $sDisk & '\Pictures')
_MKLink(@UserProfileDir & '\Saved Games', $sDisk & '\Saved Games')
_MKLink(@UserProfileDir & '\Videos', $sDisk & '\Videos')
_MKLink(@UserProfileDir & '\Desktop', $sDisk & '\Desktop')
_MKLink(@UserProfileDir & '\Documents', $sDisk & '\Documents')
;Добавление атрибутов "Скрытый\Системный" для папки Рабочий стол.
FileSetAttrib($sDisk & '\Desktop', '+SH')
;Копирование личных папок и файлов в ($sDisk).
DirCopy($sScriptDir & '\USFOLDERS', $sDisk & '\', 1)
;Обновление проводника
_WinAPI_ShellChangeNotify($SHCNE_ASSOCCHANGED, BitOR($SHCNF_IDLIST, $SHCNF_FLUSH))
_WinAPI_ShellChangeNotify($SHCNE_ALLEVENTS, BitOR($SHCNF_IDLIST, $SHCNF_FLUSH))
BlockInput(0)
SplashOff()
EndFunc
Func _ScriptDir()
Return StringRegExpReplace(@ScriptDir, '\\$', '')
EndFunc
Func _XCopy($sSrc, $sDst, $sParams = '/H /I /K /O /Q /R /S /Y')
RunWait(@ComSpec & ' /c XCOPY "' & $sSrc & '" "' & $sDst & '" ' & $sParams & ' || MD "' & $sDst & '"', '', @SW_HIDE)
EndFunc
Func _RegAdd($sRegKey, $sKey1, $sKey2, $sValName, $sValue)
RunWait(@ComSpec & ' /c REG ADD "' & $sRegKey & '\' & $sKey1 & '" /v "' & $sValName & '" /t REG_SZ /d "' & $sValue & '" /f', '', @SW_HIDE)
If $sKey2 Then
RunWait(@ComSpec & ' /c REG ADD "' & $sRegKey & '\' & $sKey2 & '" /v "' & $sValName & '" /t REG_EXPAND_SZ /d "' & $sValue & '" /f', '', @SW_HIDE)
EndIf
EndFunc
Func _RD($sPath)
RunWait(@ComSpec & ' /c RD /S /Q "' & $sPath & '"', '', @SW_HIDE)
EndFunc
Func _MKLink($sSymLink, $sTarget)
RunWait(@ComSpec & ' /c MKLINK /J "' & $sSymLink & '" "' & $sTarget & '" && ATTRIB +S +H "' & $sSymLink & '" /L', '', @SW_HIDE)
EndFunc