Vbscript 如果希望在用户';上创建文件,如何避免使用绝对文件路径;s桌面?

Vbscript 如果希望在用户';上创建文件,如何避免使用绝对文件路径;s桌面?,vbscript,filepath,desktop,Vbscript,Filepath,Desktop,现在,我的脚本在已知用户的桌面上为输出文件夹使用绝对文件路径,但是如果我想允许脚本在我不知道其用户名的用户的桌面上工作,该怎么办 示例-这是我目前正在使用的行。它很好用,但显然只适用于“约翰”。我需要使它与任何潜在的用户名-汤姆,迪克,哈利,等等工作 ' Creating log repository objFSO.CreateFolder "C:\Users\John\Desktop\Output" 简单的方法是,如果桌面不在用户通常使用的位置,则会失败,这可能是公司环境 dir "%use

现在,我的脚本在已知用户的桌面上为输出文件夹使用绝对文件路径,但是如果我想允许脚本在我不知道其用户名的用户的桌面上工作,该怎么办

示例-这是我目前正在使用的行。它很好用,但显然只适用于“约翰”。我需要使它与任何潜在的用户名-汤姆,迪克,哈利,等等工作

' Creating log repository
objFSO.CreateFolder "C:\Users\John\Desktop\Output"

简单的方法是,如果桌面不在用户通常使用的位置,则会失败,这可能是公司环境

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")

为了避免在评论中进行冗长的讨论,我在这里放置了一个不言自明的示例

用于引用字符串的帮助函数 “在命令中很有用 函数Quot(str) QUOTE=Chr(34)&str&Chr(34) 端函数 设置objFSO=CreateObject(“Scripting.FileSystemObject”) 设置WshShell=CreateObject(“Wscript.Shell”) '获取用户的桌面目录并引入变量 currentDesktop=WshShell.SpecialFolders(“桌面”)'另一种方法 '引入输出目录变量\output outputDir=objFSO.BuildPath(currentDesktop,“输出”) '如果不存在,则创建 如果不是objFSO.FolderExists(outputDir),则 objFSO.CreateFolder outputDir 如果结束 '命令中的示例用法 '将命令输出发送到\network\u config.txt WshShell.Run“%COMSPEC%/c ipconfig/all>”(objFSO.BuildPath(outputDir,“network”[u config.txt]))
请参见@Kul Tigin,这样做,脚本将如下所示:<代码>设置objFolder=objShell.Namespace(&H10&\Output)关闭
objFSO.CreateFolder objFSO.BuildPath(objShell.Namespace(&H10&).Self.Path,“Output”)
@Kul Tigin所以如果我有很多不同的函数和输出指向这个文件夹,比如说,使用
objShell.run
,我可以这样引用它吗<代码>objShell.run”%COMSPEC%/c ipconfig/all>objShell.Namespace(&H10&)Self.Path,“Output”network_config.txt“我对vbscript非常陌生,因此第一种方法似乎比第二种更符合我的能力,尽管一旦我在脚本中获得了所需的所有功能,第二种方法似乎是个好主意。如果我想实现第一个方法,它会像这样吗
objFSO.CreateFolder“%userprofile%\Desktop\Output”
我已经让它工作了,但我不明白为什么需要Quot函数。另外,如果我想将文件复制到这个新创建的文件夹中,我如何引用它?我正努力让它把东西复制到那个文件夹里。下面是我现在使用的-
objFSO.CopyFile“C:\Windows\System32\winevt\Logs\Security.evtx”,outputdir)
我收到一个权限被拒绝的错误,尽管我在命令提示符下运行了它admin@wyatt8919请随意提出新问题或从这里开始
bKey = WshShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Desktop")
     strDesktop = WshShell.SpecialFolders("Desktop")