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

Ale*_*dro 10 windows command-line cmd.exe windows-10

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

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

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

我正在使用 Windows 10。

谢谢!

编辑

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

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

Joe*_*orn 7

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

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

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

好消息是您可以在以下注册表位置获得所需信息:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Personal

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

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal
Run Code Online (Sandbox Code Playgroud)

在我的机器上,这会产生以下输出,这可能对您或多或少有用,具体取决于您需要什么以及您对 Windows Batch 脚本的使用情况:

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

你也可以试试 vbscript:

Set wshshell = CreateObject("WScript.Shell")
Documents = wshShell.SpecialFolders("MyDocuments")
Run Code Online (Sandbox Code Playgroud)

或 Powershell:

[Environment]::GetFolderPath('MyDocuments')
Run Code Online (Sandbox Code Playgroud)

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


Ben*_*n N 5

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

Environment.GetFolderPath函数可以获取已知位置的文件系统路径,包括 Documents 文件夹。此 PowerShell 命令打印文档路径:

[Environment]::GetFolderPath('MyDocuments')
Run Code Online (Sandbox Code Playgroud)

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

[Environment]::GetFolderPath('MyDocuments') | Out-File 'docspath.tmp' -Encoding ascii
Run Code Online (Sandbox Code Playgroud)

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

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

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