在.bat脚本中查找用户的文档文件夹

从批处理脚本中findXP和Vista上用户的Documents文件夹的最佳方法是什么? 假设它是%USERPROFILE%\ Documents是否安全?

在Microsoft网站上可以find有关环境variables的完整参考,也可以在registry项中find它。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders String value: Personal 

如果“我的文档”文件夹不在标准位置,则将信息从registry项中取出可能是最可靠的方法。

所以我的最终版本是这样的:

FOR / F“tokens = 3 delims =”%% G IN('REG QUERY“HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folders”/ v“Personal”')DO(SET docsdir = %% G)

delims =和下面的字符是一个tab。确保你的编辑器发出一个tab而不是空格。

编辑:在Windows 7(也许所有的窗口),你不应该指定所有的delims =,因为它默认是在标记之间使用的空格而不是一个标签。

不是安全的XP,那里是我的文件,它是本地化的。

确定我的文档位置的最佳方法是从Windowsregistry。

在这个页面上的其他几个答案和评论已经提到使用“注册查询”。 下面是考虑path中的空格以及不同版本的Windows的正确实现:

 for /f "tokens=1,2*" %%A in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal" 2^>nul') do ( set RNAME=%%A set RTYPE=%%B set RDATA=%%C ) 

以下是脚本作者的一行:

 for /f "tokens=1,2*" %%A in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal" 2^>nul') do set MY_DOCS_ROOT=%%C 

考虑本地化或国际化。 这尚未在非英语版本的Windows上进行testing。 对这个话题的评论是受欢迎的。

这适用于Windows XP,Windows Vista,Windows 7和Windows 8。


注意:在tokens =选项中使用星号对于Windows XP来说很重要,Windows XP通常在“我的文档”的path中包含空格。

注意:如果使用像%% B和%% C这样的隐式variables看起来有些奇怪,那么可以看看这篇文章:

http://ss64.com/nt/for_f.html

令牌= 3 *将处理第三个令牌和第四+所有后续项目,这也可以写成令牌= 3,*

每个指定的令牌都将导致相应的参数字母被分配。 用于令牌的字母区分大小写。

如果tokens = string中的最后一个字符是星号,则会为该行上的所有剩余文本分配其他参数。

第一个variables在FOR语句中声明,随后的variables将通过tokens =选项隐式声明。

链接的文章给出了将隐式声明的variables的确切顺序,但基本上是字母的。

(有三个标记,通过在FOR语句中声明%% A,%% B和%% C将被隐式声明。同样,通过在FOR语句中声明%% X,%% Y和%% Z将会被隐含地声明)。

这将是系统知道的地方(虽然它是XP中的My Documents),但是您必须自己判断这是否是对您的环境的安全假设。 但是,如果使用“我的文档”redirect,那么应将该variables设置为默认设置为XP中c:\ documents和settings [用户名]或Vista中c:\ users [用户名]的任何redirect。

在Vista中它是%UserProfile%\ Documents,但在WinXP中它是%UserProfile%\ My Documents。

这是两个不同的操作系统之间的唯一区别。 另外,不要忘了Vista中的video,音乐和照片也在C:\ Users [用户名]下。

-JFV

Windows XP将其命名为“我的文档”,Vista将其命名为“文档”。 您可以放入一个脚本来确定您正在运行的操作系统。

 @echo off IF EXIST "%USERPROFILE%\My Documents" ( echo Windows XP ) ELSE ( echo Vista ) 

这只是英文窗口上的“我的文档”等。 如果您使用的是另一种语言,path名是“翻译的”(除了Vista)

 :getuserdoc folder from registry set idkey="HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" call:fetchvalue errorlevelvariable %idkey% Personal goto:eof errorlevel is set if fail :fetchvalue set /a %1=0 REG query %2 /v %3 if ERRORLEVEL 1 (set /a %1=1&goto :eof) FOR /F "tokens=3* skip=2 delims= " %%A IN ('REG QUERY %2 /v %3') DO SET %3="%%A" goto:eof 

使用buttonGETSource作为此wenpage不能显示答案字符被删除!

对于像我这样的人,在寻找一种简单的方式获取用户文档文件夹时,偶然发现了这个post,对batch file没有什么经验,但是想用Werkkrew或者(可能的)衍生版本通过user55644,这就是我的工作在我的Windows 7 PC上:

 echo off setlocal enableextensions enabledelayedexpansion FOR /F "tokens=3" %%G IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') DO (SET targetdir=%%G) echo on echo %targetdir%