桌面路径的环境变量是什么?

Sco*_*ham 61 windows vbscript powershell desktop localization

我正在编写Windows批处理文件,并希望将某些内容复制到桌面.我想我可以用这个:

%USERPROFILE%\桌面\

但是,我在想,这可能只适用于英语操作系统.有没有办法可以在批处理文件中执行此操作,该文件适用于任何国际化版本?

UPDATE

我尝试了以下批处理文件:

REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop
FOR /F "usebackq tokens=3 skip=4" %%i in (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) DO SET DESKTOPDIR=%%i
FOR /F "usebackq delims=" %%i in (`ECHO %DESKTOPDIR%`) DO SET DESKTOPDIR=%%i
ECHO %DESKTOPDIR%
Run Code Online (Sandbox Code Playgroud)

得到了这个输出:

S:\>REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
    Desktop    REG_EXPAND_SZ    %USERPROFILE%\Desktop


S:\>FOR /F "usebackq tokens=3 skip=4" %i in (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folder
s" /v Desktop`) DO SET DESKTOPDIR=%i

S:\>FOR /F "usebackq delims=" %i in (`ECHO ECHO is on.`) DO SET DESKTOPDIR=%i

S:\>SET DESKTOPDIR=ECHO is on.

S:\>ECHO ECHO is on.
ECHO is on.

Kb.*_*Kb. 55

为安全起见,您应该在Powershell(或VBScript)中
使用适当的API 使用PowerShell:

[Environment]::GetFolderPath("Desktop")
Run Code Online (Sandbox Code Playgroud)

使用Powershell复制一些东西:

Copy-Item $home\*.txt ([Environment]::GetFolderPath("Desktop"))
Run Code Online (Sandbox Code Playgroud)

以下是获取桌面路径的VBScript示例:

dim WSHShell, desktop, pathstring, objFSO
set objFSO=CreateObject("Scripting.FileSystemObject")
Set WSHshell = CreateObject("WScript.Shell")
desktop = WSHShell.SpecialFolders("Desktop")
pathstring = objFSO.GetAbsolutePathName(desktop)
WScript.Echo pathstring
Run Code Online (Sandbox Code Playgroud)

  • 为此使用适当的API +1.不应使用注册表.(任何人都没有得到这个:阅读Raymond Chen的博客.是的,完全.):-) (13认同)

INS*_*INS 14

我发现最好的解决方案是将vbscript与批处理文件一起使用.

这是批处理文件:

@ECHO OFF
FOR /F "usebackq delims=" %%i in (`cscript findDesktop.vbs`) DO SET DESKTOPDIR=%%i
ECHO %DESKTOPDIR%
Run Code Online (Sandbox Code Playgroud)

这是findDesktop.vbs文件:

set WshShell = WScript.CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
wscript.echo(strDesktop)
Run Code Online (Sandbox Code Playgroud)

可能还有其他解决方案,但我个人认为这个解决方案不那么苛刻.

我在英语PC和法国PC上进行了测试 - 它似乎有效(Windows XP).

HTH,

IulianŞerbănoiu


Saq*_*qib 14

KB的使用答案[Environment]::GetFolderPath("Desktop")显然是用于执行此操作的官方Windows API.

但是,如果您在提示符处以交互方式工作,或者只是想在您的计算机上运行某些东西,则tilda(〜)字符将引用当前用户的主文件夹.因此~/desktop是用户的桌面文件夹.

  • 你不能假设 ~/desktop 工作,因为它可以被重定向到漫游配置文件。我就是这种情况;) (2认同)

Vit*_*.us 14

至少在Windows XP,Vista和7上你可以"%UserProfile%\Desktop"安全使用.

Windows XP en-US它将扩展到"C:\Documents and Settings\YourName\Desktop"
Windows XP pt-BR它将扩展到"C:\Documents and Settings\YourName\Desktop"
Windows 7 en-US它将扩展到"C:\Users\YourName\Desktop"
Windows 7 pt-BR它将扩展到"C:\Usuarios\YourName\Desktop"

在XP中,你不能用这个文件夹,别人对exept桌面 My documents转向Meus DocumentosLocal SettingsConfiguracoes locais本人来说我认为,这突出的OS时是一件坏事.

  • 它不适用于瑞典语版本,因为它在瑞典语中不称为"桌面",而是"Skrivbord".因此,`%UserProfile%\ Skrivbord`是瑞典语版本的正确用法,'%UserProfile%\ Desktop`无效. (3认同)
  • 我将桌面移动到E:\ Desktop.这不行.我正在运行Windows 8.1,但我相信你也可以在Windows 7上执行此操作.请不要这样做,因为这是图标丢失的最常见原因. (3认同)
  • @Qben,无论语言如何,英语术语都将始终使用。`%UserProfile%\Desktop` 将转到 `%UserProfile%\Skrivbord`。 (2认同)

Dav*_*ebb 6

这不仅不适用于国际版本的Windows,如果用户编辑了注册表以使其桌面文件夹位于其他位置,则会失败.您可以使用以下REG命令在Registry中查询文件位置:

REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop
Run Code Online (Sandbox Code Playgroud)

要将其变为变量,请使用以下内容:

FOR /F "usebackq tokens=3 skip=4" %%i in (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) DO SET DESKTOPDIR=%%i
FOR /F "usebackq delims=" %%i in (`ECHO %DESKTOPDIR%`) DO SET DESKTOPDIR=%%i
ECHO %DESKTOPDIR%
Run Code Online (Sandbox Code Playgroud)

  • 请记住,不鼓励从注册表中查询.因此,Kb的VBScript解决方案应该用于确保其有效. (3认同)