2017-02-08 27 views
0

Прямо сейчас мой сценарий использует абсолютный путь к файлу вывода на рабочем столе известного пользователя, но что, если я хочу разрешить скрипту работать на рабочем столе пользователя, имя пользователя которого я делаю , а не?Как избежать использования абсолютных путей к файлу, если мне нужны файлы, созданные на рабочем столе пользователя?

Пример - вот строка, которую я сейчас использую. Он отлично работает, но, очевидно, будет работать только для «Джона». Мне нужно заставить его работать с любым потенциальным именем пользователя - Томом, Диком, Гарри и т. Д. И т. Д.

+0

см http://stackoverflow.com/a/8051766/893670 –

+0

@ Кул-ТИГИН Таким образом, делая это таким образом, сценарий будет выглядеть так? - 'Установить objFolder = objShell.Namespace (& H10 & \ Output)' – wyatt8919

+0

закрыть. 'objFSO.CreateFolder objFSO.BuildPath (objShell.Namespace (& H10 &). Self.Path,« Output »)' –

ответ

0

Чтобы избежать расширенные дискуссии в комментариях, здесь я размещаю самостоятельно пояснительный пример.

' helper function to quote strings 
' useful in commands 
Function Quot(str) 
    Quot = Chr(34) & str & Chr(34) 
End Function 

Set objFSO = CreateObject("Scripting.FileSystemObject") 

Set WshShell = CreateObject("Wscript.Shell") 

' get user's desktop directory and introduce a variable 
currentDesktop = WshShell.SpecialFolders("Desktop") 'another way to do it 

' introduce output directory variable <currentDesktop>\Output 
outputDir = objFSO.BuildPath(currentDesktop, "Output") 

' create <outputDir> if not exists 
If Not objFSO.FolderExists(outputDir) Then 
    objFSO.CreateFolder outputDir 
End If 

' example usage in a command 
' send command output to <outputDir>\network_config.txt 
WshShell.Run "%COMSPEC% /c ipconfig /all >" & Quot(objFSO.BuildPath(outputDir, "network_config.txt")) 
+0

У меня это работает, но я не понимаю, почему нужна функция Quot. Кроме того, если я хочу скопировать файлы в эту недавно созданную папку, я ссылаюсь на это? Я изо всех сил пытаюсь скопировать материал в эту папку. Вот что я сейчас использую - 'objFSO.CopyFile" C: \ Windows \ System32 \ winevt \ Logs \ Security.evtx ", outputdir)' Я получаю ошибку с разрешением отказа, несмотря на то, что запустил ее в командной строке, как admin – wyatt8919

+0

@ wyatt8919 не стесняйтесь задать новый вопрос или начать здесь https://stackoverflow.com/search?q=%5Bvbscript%5D+permission+denied –

0

Простой способ, но не удается, если рабочий стол не находится в обычном месте для пользователя, это может быть совместная среда.

dir "%userprofile%\Desktop" 

Лучший способ

for /f "skip=2 tokens=3" %A in ('Reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Desktop"') do set doc=%A 

dir "%doc%" /a 

(Помните %%A в пакете и %A если типирование) Я думал, что ваш вопрос был о партии. Оба метода так же просты, как и другие в VBScript.

set WshShell = WScript.CreateObject("WScript.Shell") 
WScript.Echo "WinDir is " & WshShell.ExpandEnvironmentStrings("%userprofile%\Desktop\Output") 

или

bKey = WshShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Desktop") 

или

 strDesktop = WshShell.SpecialFolders("Desktop") 
+0

Я очень новичок в vbscript, так что первый метод кажется более в моей способности, чем второй, хотя, как только я получу всю функциональность, которую мне нужно встроить в скрипт, этот второй метод кажется хорошей идеей. Если бы я хотел реализовать первый метод, будет ли он выглядеть примерно так: 'objFSO.CreateFolder"% userprofile% \ Desktop \ Output "' – wyatt8919

 Смежные вопросы

  • Нет связанных вопросов^_^