Windows 文档目录是否有系统定义的环境变量?
我知道Windows XP(以及Vista和Windows 7)上的Windows 文档目录是否有系统定义的环境变量?,windows,environment-variables,Windows,Environment Variables,我知道Windows XP(以及Vista和Windows 7)上的%USERPROFILE%系统定义的环境变量。是否有一个系统定义的环境变量指向“我的文档”目录的位置?在XP上默认为%USERPROFILE%\mydocuments,在Win7上默认为%USERPROFILE%\Documents。如果可以避免的话,我只是想避免在Powershell脚本中测试OS版本。在我的默认安装XP系统上,没有环境变量。您可以使用命令行中的“set”命令(无参数)列出所有变量。所以你可能得做个测试 如果您
%USERPROFILE%
系统定义的环境变量。是否有一个系统定义的环境变量指向“我的文档”目录的位置?在XP上默认为%USERPROFILE%\mydocuments
,在Win7上默认为%USERPROFILE%\Documents
。如果可以避免的话,我只是想避免在Powershell脚本中测试OS版本。在我的默认安装XP系统上,没有环境变量。您可以使用命令行中的“set”命令(无参数)列出所有变量。所以你可能得做个测试
如果您不想测试操作系统版本,只需检查“文档”是否存在,如果不存在,请尝试“我的文档”,反之亦然。然而,这并不完美,因为s/o可能在他的XP机器上有一个“文档”文件夹
顺便说一句:我的系统是德语,所以文件夹名为“Dokumente”。你可能需要考虑到这一点
该文件夹的路径存储在中
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
在个人
下。不过,您需要注册表访问权限
来源:如果您键入:
set
在命令提示符中,您将获得系统上定义的所有环境变量的列表
查看我的文件(Windows7 Home Premium)中定义的文件,没有一个指向我的文档
供参考:
该函数可用于获取“我的文档”目录的路径。或者,该方法可以在.Net下使用
C:\Documents and Settings\mrabinovitch>set | grep -i document
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\myuser\Application Data
HOMEPATH=\Documents and Settings\myuser
USERPROFILE=C:\Documents and Settings\myuser
正如您所看到的,没有这样的变量。一些混淆可能是由于CSIDL/KNOWNFOLDERID值与命令shell环境变量的可用性造成的
[environment]::getfolderpath("mydocuments")
避免使用魔术弦
[Environment]::GetFolderPath([Environment+SpecialFolder]::MyDocuments)
对于.NET,以下内容适用(即不适用于所有windows应用程序):
正如一个答案所指出的,没有指向我的文档的环境变量,但是.NET有
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
(C#)
我之所以添加这个答案,是因为在谷歌搜索C#、环境变量和我的文档时会出现这个问题,而Justin的答案不包含代码行:)
使用上述代码行是在.NET中访问我的文档的首选方式:)
复制粘贴此行以备C#使用:
请注意,在MyDocuments中C#需要大写字母D。没有内置的环境变量,但在PowerShell中,您可以找到以下位置:
[Environment]::GetFolderPath("mydocuments")
显然,您还可以通过以下方式创建环境变量:
$env:DOCUMENTS = [Environment]::GetFolderPath("mydocuments")
(只是重申前面的答案)没有为“我的文档”目录提供现成的环境变量(WinXP)
但是,可以使用以下命令设置变量:
在Windows 7/8.1上测试:
for/f“tokens=3*delims=“%a^
在('reg query“HKEY\U CURRENT\U USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell文件夹”/v“Personal”')中^
do(设置mydocuments=%a%b)
或(一班轮)
for/f“tokens=3*delims=“%a in('reg query“HKEY\u CURRENT\u USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell文件夹”/v“Personal””)do(设置mydocuments=%a%b)
这将为您提供一个%mydocuments%
变量:
C:\>echo mydocuments=“%mydocuments%”
mydocuments=“C:\pathto\My Documents”
(有人使用XP/Vista吗?如果有,可以测试一下并告诉我们它是否有效?实际上,
%USERPROFILE%\My Documents
应该可以在Windows 7中使用。这就是我所使用的。windows中不存在“通过设计文档”环境变量。您必须创建一个自定义的。去做这件事。定义一个名为MYDOCUMENTS的环境变量来引用需要引用的任何位置。此后,它将是一个由%MYDOCUMENTS%引用的环境变量。对于Windows 7中的批处理文件(至少),Nick G的解决方案需要稍微调整以设置用户定义的变量UserDocuments:
FOR /F "tokens=3* delims= " %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do (set UserDocuments=%%a)
请注意,唯一的区别是
@FOR /F "tokens=3* delims= " %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do @(Set UserDocuments=%%a)
@Echo ~~~~~~~~ UserDocuments=%UserDocuments%
谢谢尼克·G。你的回答教会了我很多。我希望这对其他人有所帮助。除了基于和的答案之外,您还可以使用from。下面是一个自包含的命令/批处理脚本,演示了如何:
@echo off
call :script > "%temp%\%~n0.js" && cscript //nologo "%temp%\%~n0.js" %*
goto :EOF
:script
echo var specialFolders = WScript.CreateObject('WScript.Shell').SpecialFolders;
echo if (WScript.Arguments.length === 0) {
echo for (var e = new Enumerator(specialFolders); !e.atEnd(); e.moveNext()) {
echo WScript.Echo(e.item());
echo }
echo } else {
echo for (var e = new Enumerator(WScript.Arguments); !e.atEnd(); e.moveNext()) {
echo WScript.Echo(specialFolders(e.item()));
echo }
echo }
goto :EOF
它在JScript中发出一个WSH脚本,并使用它为作为参数提供的特殊文件夹令牌获取一个或多个路径。假设将上述脚本保存为名为specialf.cmd
的文件,则获取当前用户文档目录路径的用法如下:
specialf MyDocuments
下面是测试所有特殊文件夹令牌的另一个用法:
specialf ^
AllUsersDesktop ^
AllUsersStartMenu ^
AllUsersPrograms ^
AllUsersStartup ^
Desktop ^
Favorites ^
Fonts ^
MyDocuments ^
NetHood ^
PrintHood ^
Programs ^
Recent ^
SendTo ^
StartMenu ^
Startup ^
Templates
您可以使用它来捕获环境变量,如下所示:
for /f "delims=/" %p in ('specialf MyDocuments') do @set MYDOCS=%p
改进@NickGrealy答案:
reg查询
输出for /f "skip=2 tokens=2*" %%A in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do set "UserDocs=%%B"
但考虑到注册表值
[HKEY\U CURRENT\U USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\!请勿使用此注册表项]
根据@AtifAziz的回答:
for /f "tokens=*" %A in ('echo WScript.Echo^(^(new ActiveXObject^("WScript.Shell"^)^).SpecialFolders^("MyDocuments"^)^)^>%TEMP%\getdoc.js ^& cscript /nologo %TEMP%\getdoc.js ^& del /q %TEMP%\getdoc.js') do @set "UserDocs=%A"
Windows批处理文件(.bat)或Windows命令脚本(.cmd)
更新Windows批处理文件(.bat)或Windows命令脚本(.cmd)
在WinXP、vista、8、8.1和10中测试和工作
@echo off
for /f "skip=2 tokens=2*" %%c in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do @set "docs=%%d" && echo WIN XP - 10
xcopy "C:\test.txt" "%docs%" /f /y
echo %docs%
pause
EXIT
下面是运行Windows的所有用户的用户变量的完整列表 代码的reg查询部分将找到该值并进行设置,以便可以立即使用,并允许其他代码为所有用户永久设置该值。 代码的ad注册表部分将为所有用户启用它。setx使您无需注销和重新登录即可使用这些代码 当前用户变量仅适用于此人
for /f "skip=2 tokens=2*" %%A in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do set "UserDocs=%%B"
for /f "tokens=*" %A in ('echo WScript.Echo^(^(new ActiveXObject^("WScript.Shell"^)^).SpecialFolders^("MyDocuments"^)^)^>%TEMP%\getdoc.js ^& cscript /nologo %TEMP%\getdoc.js ^& del /q %TEMP%\getdoc.js') do @set "UserDocs=%A"
@echo off
ver | find "XP" > nul
if %ERRORLEVEL% == 0 set Docs=%UserProfile%\My Documents & echo WIN XP
if %ERRORLEVEL% == 1 set Docs=%UserProfile%\Documents & echo WIN vista - 10
xcopy "C:\test.txt" "%Docs%" /f /y
pause
EXIT
@echo off
ver | find "XP" > nul
if %ERRORLEVEL% == 0 SET DOCS=%USERPROFILE%\My Documents & echo WIN XP
if %ERRORLEVEL% == 1 FOR /f "tokens=3" %%x IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do (set docs=%%x) & echo WIN vista - 10
xcopy "C:\test.txt" "%docs%" /f /y
echo %docs%
pause
EXIT
@echo off
for /f "skip=2 tokens=2*" %%c in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do @set "docs=%%d" && echo WIN XP - 10
xcopy "C:\test.txt" "%docs%" /f /y
echo %docs%
pause
EXIT
@ECHO OFF
ECHO REG ALL USER variables
ECHO all user desktop
for /f "skip=2 tokens=3*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Desktop"') do @set "ALLDT=%%d"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "ALLDT" /t "REG_SZ" /d "%ALLDT%" /f
setx ALLDT "%ALLDT%"
Echo all user's documents
for /f "skip=2 tokens=3*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Documents"') do @set "ALLDOC=%%d"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "ALLDOC" /t "REG_SZ" /d "%ALLDOC%" /f
setx ALLDOC "%ALLDOC%"
echo all user start menu
for /f "skip=2 tokens=3*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Programs"') do @set "ALLSM=%%d"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "ALLSM" /t "REG_SZ" /d "%ALLSM%" /f
setx ALLSM "%ALLSM%"
Echo all users startup
for /f "skip=2 tokens=3*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Startup"') do @set "ALLSMSTU=%%d"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "ALLSMSTU" /t "REG_SZ" /d "%ALLSMSTU%" /f
setx ALLSMSTU "%ALLSMSTU%"
Echo all users music
for /f "skip=2 tokens=2*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "CommonMusic"') do @set "ALLMU=%%d"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "ALLMU" /t "REG_SZ" /d "%ALLMU%" /f
setx ALLMU "%ALLMU%"
echo all users pictures
for /f "skip=2 tokens=2*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "CommonPictures"') do @set "ALLPIC=%%d"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "ALLPIC" /t "REG_SZ" /d "%ALLPIC%" /f
setx ALLPIC "%ALLPIC%"
Echo all users videos
for /f "skip=2 tokens=2*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "CommonVideo"') do @set "ALLVID=%%d"
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "ALLVID" /t "REG_SZ" /d "%ALLVID%" /f
setx ALLVID "%ALLVID%"
Echo set cerrent user variables
Echo current users desktop
for /f "skip=2 tokens=2*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Desktop"') do @set "myDesktop=%%d"
REG ADD "HKEY_CURRENT_USER\Environment" /v "myDesktop" /t "REG_SZ" /d "%myDesktop%" /f
setx myDesktop "%myDesktop%"
Echo current users documents
for /f "skip=2 tokens=2*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do @set "mydoc=%%d"
REG ADD "HKEY_CURRENT_USER\Environment" /v "mydoc" /t "REG_SZ" /d "%mydoc%" /f
setx mydoc "%mydoc%"
Echo current user start menu
for /f "skip=2 tokens=3*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Start Menu"') do @set "myStart=%%d"
REG ADD "HKEY_CURRENT_USER\Environment" /v "myStart" /t "REG_SZ" /d "%myStart%" /f
setx myStart "%myStart%"
Echo current user startup
for /f "skip=2 tokens=2*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Startup"') do @set "myStartup=%%d"
REG ADD "HKEY_CURRENT_USER\Environment" /v "myStartup" /t "REG_SZ" /d "%myStartup%" /f
setx myStartup "%myStartup%"
Echo current users music
for /f "skip=2 tokens=3*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Music"') do @set "myMU=%%d"
REG ADD "HKEY_CURRENT_USER\Environment" /v "myMU" /t "REG_SZ" /d "%myMU%" /f
setx myMU "%myMU%"
Echo current users pictures
for /f "skip=2 tokens=3*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Pictures"') do @set "myPIC=%%d"
REG ADD "HKEY_CURRENT_USER\Environment" /v "myPIC" /t "REG_SZ" /d "%myPIC%" /f
setx myPIC "%myPIC%"
Echo current users video
for /f "skip=2 tokens=3*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Video"') do @set "myVID=%%d"
REG ADD "HKEY_CURRENT_USER\Environment" /v "myVID" /t "REG_SZ" /d "%myVID%" /f
setx myVID "%myVID%"
exit