2016-01-28 4 views
1

В Windows 7 я вырезал папки пользовательской библиотеки, а затем вставляю их в другое место (включая их содержимое). Когда я это делаю, Windows 7 делает необходимые изменения (реестр, путь ... и т. Д.), Чтобы снова активировать эти специальные папки. Есть ли способ его сценария (если возможно, в VBS)?Перемещение пользовательской библиотеки Windows 7 (рабочий стол, мои документы и т. Д.) В другое место

Я дал взглянуть на команды WshShell.SpecialFolders и fso.MoveFolder, но я не нашел способ ...

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

ответ

0

Необходимо использовать объекты оболочки из Shell32. Это перечисляет или выполняет команду в объекте file/folder (например, Cut). Вы можете использовать Shell.namespace получить специальную папку, см https://msdn.microsoft.com/en-us/library/windows/desktop/bb774094(v=vs.85).aspx

HelpMsg = vbcrlf & " ShVerb" & vbcrlf & vbcrlf & " David Candy 2014" & vbcrlf & vbcrlf & " Lists or runs an explorer verb (right click menu) on a file or folder" & vbcrlf & vbcrlf & " ShVerb <filename> [verb]" & vbcrlf & vbcrlf & " Used without a verb it lists the verbs available for the file or folder" & vbcrlf & vbcrlf 
HelpMsg = HelpMsg & " The program lists most verbs but only ones above the first separator" & vbcrlf & " of the menu work when used this way" & vbcrlf & vbcrlf 
HelpMsg = HelpMsg & " The Properties verb can be used. However the program has to keep running" & vbcrlf & " to hold the properties dialog open. It keeps running by displaying" & vbcrlf & " a message box." 
Set objShell = CreateObject("Shell.Application") 
Set Ag = WScript.Arguments 
set WshShell = WScript.CreateObject("WScript.Shell") 
Set fso = CreateObject("Scripting.FileSystemObject") 

    If Ag.count = 0 then 
     wscript.echo " ShVerb - No file specified" 
     wscript.echo HelpMsg 
     wscript.quit 
    Else If Ag.count = 1 then 
     If LCase(Replace(Ag(0),"-", "/")) = "/h" or Replace(Ag(0),"-", "/") = "/?" then 
      wscript.echo HelpMsg 
      wscript.quit 
     End If 
    ElseIf Ag.count > 2 then 
     wscript.echo vbcrlf & " ShVerb - To many parameters" & vbcrlf & " Use quotes around filenames and verbs containing spaces" & vbcrlf 
     wscript.echo HelpMsg 
     wscript.quit 
    End If 

    If fso.DriveExists(Ag(0)) = True then 
     Set objFolder = objShell.Namespace(fso.GetFileName(Ag(0))) 
'  Set objFolderItem = objFolder.ParseName(fso.GetFileName(Ag(0))) 
     Set objFolderItem = objFolder.self 
     msgbox ag(0) 
    ElseIf fso.FolderExists(Ag(0)) = True then 
     Set objFolder = objShell.Namespace(fso.GetParentFolderName(Ag(0))) 
     Set objFolderItem = objFolder.ParseName(fso.GetFileName(Ag(0))) 
    ElseIf fso.fileExists(Ag(0)) = True then 
     Set objFolder = objShell.Namespace(fso.GetParentFolderName(Ag(0))) 
     Set objFolderItem = objFolder.ParseName(fso.GetFileName(Ag(0))) 
    Else 
     wscript.echo " ShVerb - " & Ag(0) & " not found" 
     wscript.echo HelpMsg 
     wscript.quit 
    End If 

    Set objVerbs = objFolderItem.Verbs 

    'If only one argument list verbs for that item 

    If Ag.count = 1 then 
     For Each cmd in objFolderItem.Verbs 
      If len(cmd) <> 0 then CmdList = CmdList & vbcrlf & replace(cmd.name, "&", "") 
     Next 
     wscript.echo mid(CmdList, 2) 

    'If two arguments do verbs for that item 

    ElseIf Ag.count = 2 then 
     For Each cmd in objFolderItem.Verbs 
      If lcase(replace(cmd, "&", "")) = LCase(Ag(1)) then 
       wscript.echo(Cmd.doit) 
       Exit For 
      End If 
     Next 
    'Properties is special cased. Script has to stay running for Properties dialog to show. 
     If Lcase(Ag(1)) = "properties" then 
      WSHShell.AppActivate(ObjFolderItem.Name & " Properties") 
      msgbox "This message box has to stay open to keep the " & ObjFolderItem.Name & " Properties dialog open." 
     End If 
    End If 
End If 

Копирование файлов в папке на пустой или существующий почтовый файл. Причина. Zip-файлы - это папки в оболочке.

Set objShell = CreateObject("Shell.Application") 
Set Ag=Wscript.Arguments 
set WshShell = WScript.CreateObject("WScript.Shell") 

Set SrcFldr=objShell.NameSpace(Ag(1)) 
Set DestFldr=objShell.NameSpace(Ag(0)) 
Set FldrItems=SrcFldr.Items 
DestFldr.CopyHere FldrItems, &H214 
Msgbox "Finished" 
+0

Большое спасибо за ваше время, ваш ответ/подсказку и за помощь друг другу! Я попытался преобразовать скрипт, который вы мне предоставили, и интегрировать его в мой существующий скрипт, но я застрял. Я думаю, что мне придется вызвать сценарий таким образом: 'arrFolders = Array (" \ Desktop \ "[...]" \ Downloads \ ") TargetCommand = targetPdir &" Coller " Для каждого myFolder в arrFolders SourceFolder = fso.buildpath (sourcePdir, MyFolder) \t CutLauncher = "shverb.vbs" & SourceFolder & "Купер" sh.Run CutLauncher, 1, ложные PasteLauncher = "shverb.vbs" & TargetCommand sh.Run PasteLauncher , 1, true Next' Если у вас есть идея? –

+0

И на самом деле, кажется, не работает на разных разделах ... Ой! –

+0

Мой сценарий показывает технику. Так что, например, установите свою папку в shell.namespace, затем используйте технику, чтобы получить родительскую папку и вашу папку в качестве файла folderitem. Тогда ПЕРЕМЕСЬ. Перемещение обновляет реестр (копирует копии файлов). Перемещение такое же, как вырезание и вставка. Я отредактирую свой пост с более простым примером. –