Windows 10 Documents文件夹的环境变量

Jer*_*xon 2 batch-file windows-10

我希望编写一个批处理文件,将文件复制到用户的Documents文件夹,但是找不到指示它的环境变量。我可以从用户配置文件路径派生Documents文件夹,但这是不可靠的,因为Windows可以通过选择“位置”选项卡+“移动”文件夹属性将“ Documents”文件夹移动到任何位置。

有人知道如何找到该文件夹​​吗?

Kli*_*cou 5

没有为此的环境变量。相反,您可以在Windows注册表中存储“文档”文件夹名称的位置中查找,即使已弃用该名称:

@echo off
for /f "tokens=3*" %%p in ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Personal') do (
    set DocumentsFolder=%%p
)
echo %DocumentsFolder%
Run Code Online (Sandbox Code Playgroud)

  • 它可能存在或不存在,但是即使存在,您也必须检查此键值以进行自定义:`HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ User Shell Folders \ Personal` (2认同)

roj*_*ojo 5

好吧,你问的不是傻瓜证明。你指的是图书馆。库的问题在于库中可以包含多个文件夹。

但是,有一种合理的方法可以获得您想要的东西。Windows 提供了ShellSpecialFolder可以使用Shell.ApplicationCOM 对象枚举的常量。Documents库的常数是0x05。这是一个 PowerShell 命令示例:

powershell "(new-object -COM Shell.Application).Namespace(0x05).Self.Path"
Run Code Online (Sandbox Code Playgroud)

我的家用电脑有一个 120GB 的 SSD 启动驱动器和一个 2TB D: 驱动器。所以我的文档库指向D:\Documents. 上面的命令D:\Documents按照您希望的方式打印。

如果您更喜欢 Windows Script Host 而不是 PowerShell(因为 WSH 更快),您可以编写一个混合批处理 + JScript 脚本来完成相同的任务。

@if (@CodeSection == @Batch) @then
@echo off & setlocal

rem // cscript re-evaluates this script with the JScript interpreter
cscript /nologo /e:JScript "%~f0"

goto :EOF
@end // end Batch / begin JScript hybrid chimera

WSH.Echo(WSH.CreateObject('Shell.Application').Namespace(0x05).Self.Path);
Run Code Online (Sandbox Code Playgroud)

您还可以考虑让用户浏览到他想要的保存位置,默认0x05为文档。