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

问题描述 投票:0回答:6

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

%UserProfile%\桌面\

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

更新

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

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%

并得到这个输出:

S:\>REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell 文件夹" /v 桌面

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell 文件夹
    桌面 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 文件夹
s" /v 桌面`) 请设置 DESKTOPDIR=%i

S:\>FOR /F "usebackq delims=" %i in (`ECHO ECHO 已打开。`) 请设置 DESKTOPDIR=%i

S:\>SET DESKTOPDIR=ECHO 已打开。

S:\>ECHO ECHO 已打开。
ECHO 已打开。
windows powershell vbscript localization desktop
6个回答
68
投票

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

[Environment]::GetFolderPath("Desktop")

使用 Powershell 复制内容:

Copy-Item $home\*.txt ([Environment]::GetFolderPath("Desktop"))

这是一个获取桌面路径的 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

21
投票

我发现最好的解决方案是使用 vbscript 和批处理文件。

这是批处理文件:

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

这是findDesktop.vbs文件:

set WshShell = WScript.CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
wscript.echo(strDesktop)

可能还有其他解决方案,但我个人认为这个解决方案不那么黑客。

我在一台英语电脑和一台法语电脑上测试了这个 - 它似乎可以工作(Windows XP)。


17
投票

编辑: 使用接受的答案,如果未使用默认位置,这将不起作用,例如:用户将桌面移动到另一个驱动器,例如 D:\Desktop


至少在 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 上,您不能将其用于除桌面之外的其他文件夹

My documents
转向
Meus Documentos
Local Settings
转向
Configuracoes locais
我个人认为在投影操作系统时这是一件坏事。


15
投票

KB 的答案是使用

[Environment]::GetFolderPath("Desktop")
显然是执行此操作的官方 Windows API。

但是,如果您在提示符下进行交互工作,或者只是想要在您的计算机上运行的东西,则 tilda (~) 字符指的是当前用户的主文件夹。所以

~/desktop
是用户的桌面文件夹。


9
投票

这不仅不适用于国际版 Windows,而且如果用户编辑注册表以使其桌面文件夹驻留在其他位置,也会失败。您可以使用

REG
命令在注册表中查询文件位置:

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%

4
投票

您还可以打开 DOS 命令提示符并执行 set 命令。

这将使您了解系统上有哪些可用的环境变量。

例如- 既然您特别要求非英语 Windows - 这是我自己的德语版(Window7-64 位) :

的示例
设置 > env.txt
输入 env.txt

ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\SOF\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common 文件
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\公共文件
计算机名=VMSOF
ComSpec=C:\Windows\system3
© www.soinside.com 2019 - 2024. All rights reserved.