如何在Windows资源管理器中获取桌面的真实路径?

如何在Windows资源管理器中获取桌面的真实路径?

这个问题困扰了我很久,至今还没能找到解决办法。

  1. 打开 Windows 资源管理器。
  2. 单击左侧边栏中的“桌面”。
  3. 点击地址栏中的“桌面”。

结果:C:\...\它只显示而不是Desktop

桌面 Windows 资源管理器

相反,我想获得真正的物理路径:

C:\Users\MyName\Desktop\

我该如何实现这一点(Windows 注册表中的设置)?

答案1

无法从 GUI 更改 Windows 行为的这一特定方面,但有一个很好的解决方法,不需要任何第三方软件:

  1. 打开 Windows 资源管理器:Windows+ E
  2. 按住Shift,执行Right click

答案2

%UserProfile%\Desktop是错误的!永远不要使用它

特殊文件夹轻松移动,这就是为什么有它们的注册表项,否则我们就需要在任何地方对它们进行硬编码。甚至 Windows 也可以安装到与 C:\Windows 不同的文件夹/驱动器和程序文件可以更改。文档、图片、桌面也一样……如今 Windows 倾向于默认启用 OneDrive 备份,用户特殊文件夹将不是不再位于用户主路径中。甚至 OneDrive 文件夹路径也可以更改

桌面属性

%USERPROFILE%/Desktop将桌面文件夹移至 OneDrive 后不再有效

获取路径可靠地你需要打电话在 PowerShell 中运行以下命令

[Environment]::GetFolderPath([Environment+SpecialFolder]::Desktop)

或者你可以在 PowerShell 中运行此命令

(New-Object –ComObject Shell.Application).namespace(0x10).Self.Path

0x10 这里是桌面的 Shell 特殊文件夹常量

另一种 PowerShell 方法:

$c = New-Object -ComObject Wscript.Shell
$c.SpecialFolders("Desktop")

上述最后两个解决方案处理 COM 对象,因此它们可以用纯虚拟专用网络或者杰斯, 甚至混合批处理-VBS/Js.例如上面的纯VBS解决方案:

Set oShell = CreateObject("Wscript.Shell")
Set oSFolders = oShell.SpecialFolders
WScript.Echo oSFolders("Desktop")

第二段代码的混合批处理/Js 解决方案

@if (@CodeSection == @Batch) @then
@echo off
cscript //e:jscript //nologo "%~f0" %*
exit /b
@end

// JScript Section
WScript.Echo((new ActiveXObject("shell.application")).namespace(0x10).Self.Path);

如果你不想要上述混合解决方案,你可以从批处理文件中调用 PowerShell 来获取路径

powershell -C "[Environment]::GetFolderPath([Environment+SpecialFolder]::Desktop)"

“纯”批处理解决方案更加棘手,因为您必须解析多个注册表项

@echo off
setlocal EnableExtensions DisableDelayedExpansion

set "DesktopFolder="
for /F "skip=1 tokens=1,2*" %%I in ('%SystemRoot%\System32\reg.exe QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop 2^>nul') do if /I "%%I" == "Desktop" if not "%%~K" == "" if "%%J" == "REG_SZ" (set "DesktopFolder=%%~K") else if "%%J" == "REG_EXPAND_SZ" call set "DesktopFolder=%%~K"
if not defined DesktopFolder for /F "skip=1 tokens=1,2*" %%I in ('%SystemRoot%\System32\reg.exe QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Desktop 2^>nul') do if /I "%%I" == "Desktop" if not "%%~K" == "" if "%%J" == "REG_SZ" (set "DesktopFolder=%%~K") else if "%%J" == "REG_EXPAND_SZ" call set "DesktopFolder=%%~K"
if not defined DesktopFolder set "DesktopFolder=\"
if "%DesktopFolder:~-1%" == "\" set "DesktopFolder=%DesktopFolder:~0,-1%"
if not defined DesktopFolder set "DesktopFolder=%UserProfile%\Desktop"

echo Desktop folder is: "%DesktopFolder%"

endlocal

答案3

  1. 复制以下代码并将其保存在 .reg 文件中。

    shell_folder_full_path.reg

    Windows Registry Editor Version 5.00
    
    ;Desktop
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{754AC886-DF64-4CBA-86B5-F7FBF4FBCEF5}]
    "ParsingName"=-
    
    ;Local Documents
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{f42ee2d3-909f-4907-8871-4c22fc0bf756}]
    "ParsingName"=-
    
    ;Local Downloads
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{7d83ee9b-2244-4e70-b1f5-5393042af1e4}]
    "ParsingName"=-
    
    ;Local Music
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{a0c69a99-21c8-4671-8703-7934162fcf1d}]
    "ParsingName"=-
    
    ;Local Pictures
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{0ddd015d-b06c-45d5-8c4c-f59713854639}]
    "ParsingName"=-
    
    ;Local Videos
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{35286a68-3c57-41a1-bbb1-0eae73d76c95}]
    "ParsingName"=-
    
  2. 以管理员权限运行该.reg。

  3. 重新启动Explorer.exe

来源:网上帮助

重要的:请注意,在以下情况下,上述解决方法无效:

  • 你已经重定向将 shell 文件夹复制到 OneDrive
  • 您通过“此电脑”而不是“快速访问

答案4

Shell 命名空间很难对付。作为一种解决方法,以下 .reg 文件将添加一个上下文菜单项,以打开与 shell 文件夹对应的文件系统文件夹。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenFSFolder]
@="Open file folder (new window)"

[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenFSFolder\command]
@="explorer.exe \"%V\""

[HKEY_CLASSES_ROOT\Directory\shell\OpenFSFolder]
@="Open file folder (new window)"

[HKEY_CLASSES_ROOT\Directory\shell\OpenFSFolder\command]
@="explorer.exe \"%V\""

相关内容