答案1
无法从 GUI 更改 Windows 行为的这一特定方面,但有一个很好的解决方法,不需要任何第三方软件:
- 打开 Windows 资源管理器:Windows+ E。
- 按住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
复制以下代码并将其保存在 .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"=-
以管理员权限运行该.reg。
重新启动Explorer.exe
来源:网上帮助
重要的:请注意,在以下情况下,上述解决方法无效:
答案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\""