我正在寻找一个将文件复制到用户的Documents文件夹的批处理文件,但我找不到指示它的环境变量。我可以从用户配置文件路径派生Documents文件夹,但这是不可靠的,因为Windows可以将Documents文件夹移动到任何位置,方法是选择Location选项卡+ Move in the folder properties。
有人知道如何找到该文件夹吗?
答案 0 :(得分:5)
没有环境变量。相反,您可以在Windows注册表中查找它存储Documents文件夹名称的位置,但即使这样也不推荐使用:
@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%
答案 1 :(得分:3)
嗯,你问的不是傻瓜证明。您所指的是图书馆。而库存在的问题是库中可能包含多个文件夹。
然而,有一种合理的方式来获得你想要的东西。 Windows提供了ShellSpecialFolder
个常量,您可以使用Shell.Application
COM对象进行枚举。 Documents
库的常量为0x05
。这是一个PowerShell命令示例:
powershell "(new-object -COM Shell.Application).Namespace(0x05).Self.Path"
我的家用电脑配有120GB SSD启动驱动器和2TB D:驱动器。所以我的文档库指向D:\Documents
。上面的命令打印D:\Documents
,因为你希望它会。
如果您更喜欢Windows脚本而不是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);
您可能还会将letting the user browse视为所需的保存位置,默认为0x05
以获取文档。
答案 2 :(得分:3)
我没有看到一种完全可靠的方法来批量执行此操作。我知道这不在请求之内,但我认为这个vbscript可以正常工作。
Option explicit
Dim objShell
Dim strPath
Set objShell = Wscript.CreateObject("Wscript.Shell")
strPath = objShell.SpecialFolders("MyDocuments")
msgbox strPath