Windows 命令提示符 - 获取重新定位用户的 Documents 文件夹

Windows 命令提示符 - 获取重新定位用户的 Documents 文件夹

我正在尝试编写一个简单的批处理脚本,用于从%userprofile%\Documents目录中复制一些文件。我正在我的机器上测试该脚本,但在经历了一些失败之后,我意识到我将用户的数据移动到了独立分区%userprofile%\Documents。因此,空的,并且(显然)没有复制任何内容。

我已经尝试了其他环境变量,例如%homedrive%%homepath%,但它们仍然指向标准C:\...

有没有办法找出实际的用于存储用户数据的驱动器?

我正在使用 Windows 10。

谢谢!

编辑

正如Ƭᴇcʜιᴇ007 指出的那样,我没有将用户的数据移动到另一个分区,但我只是将“主”文件夹(文档、视频等)重新定位到另一个分区上的一些相应文件夹:右键单击(例如)文档、属性、路径。

我如何才能找出以这种方式重新定位的文档文件夹的路径?

答案1

不幸的是,如果您已将其从相对于配置文件的默认路径重定向,则没有简单的环境变量可以从批处理脚本中检查。您可以在此处查看环境变量的完整列表(包括一些未记录的变量):

http://ss64.com/nt/syntax-variables.html

另一件需要注意的事情是文件夹重定向甚至允许您将这些移动到网络共享。您不必使用“驱动器”;它可能只是一个 UNC 路径。

好消息是您需要的信息可在以下注册表位置找到:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\用户 Shell 文件夹\Personal

您可以在该键中移动一整套文件夹User Shell Folders,但使用 Windows Batch 读取此处的“我的文档”文件夹的方法如下:

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal

在我的计算机上,这将产生以下输出,根据您的需要以及您对 Windows Batch 脚本的熟悉程度,该输出对您来说可能或多或少有用:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\用户 Shell 文件夹
    个人 REG_EXPAND_SZ C:\Users\joel\Documents

您也可以尝试 vbscript:

Set wshshell = CreateObject("WScript.Shell")
Documents = wshShell.SpecialFolders("MyDocuments")

或 Powershell:

[Environment]::GetFolderPath('MyDocuments')

这最终可能也可以通过 Windows 上的 bash 通过 WSL 实现(真的!),但我还没有看到如何以始终准确的方式做到这一点。

答案2

假设您对当前文件夹或计算机上某个已知位置具有写权限……您可以使用 PowerShell!

Environment.GetFolderPath函数可以获取文件系统路径著名地点,包括 Documents 文件夹。此 PowerShell 命令打印 Documents 路径:

[Environment]::GetFolderPath('MyDocuments')

可以使用 cmdlet 将其写入文件Out-File。重定向运算符>在这里实际上不起作用,因为它会生成带有 BOM 的 Unicode 文本文件,这在批处理器中很难处理。

[Environment]::GetFolderPath('MyDocuments') | Out-File 'docspath.tmp' -Encoding ascii

该文件可以读入批处理变量set /p. 综合起来,我们得到这个批处理脚本片段:

powershell -Command "[Environment]::GetFolderPath('MyDocuments') | Out-File 'docspath.tmp' -Encoding ascii"
set /p DOCSPATH=< docspath.tmp
del docspath.tmp

现在可以将用户的 Documents 文件夹的路径表示为%DOCSPATH%

答案3

我有可靠的答案。将答案返回给 dos 的 powershell 组合

for /f "delims=" %%a in ('powershell.exe -command "& {write-host $([Environment]::GetFolderPath('MyDocuments'))}"') do Set "$Value=%%a"
Echo Value received from Powershell : %$Value%

答案4

嗯,很简单:)

桌面文件夹的位置列在此处:

\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell 文件夹

或者更简单的是使用 PowerShell

$DesktopPath = [环境]::GetFolderPath("桌面")

相关内容