Je connais la variable d'environnement définie par le système %USERPROFILE%
sous Windows XP (ainsi que Vista et Windows 7). Existe-t-il une variable d'environnement définie par le système qui pointe vers l'emplacement du répertoire "Mes documents"? Sur XP par défaut, il s'agit de %USERPROFILE%\My Documents
et sur Windows 7, de %USERPROFILE%\Documents
. Je voulais juste éviter de devoir tester la version du système d'exploitation dans un script Powershell si je pouvais l'éviter.
Sur mon système XP d'installation par défaut, il n'y a pas de variable d'environnement pour cela. Vous pouvez lister toutes les variables avec la commande "set" (sans paramètre) dans la ligne de commande. Donc, vous devez probablement faire un test.
Si vous ne souhaitez pas tester la version du système d'exploitation, vous pouvez simplement vérifier si "Documents" existe et sinon, essayez "Mes documents" ou inversement. Cela n’est cependant pas parfait, car l’opérateur peut avoir un dossier "Documents" sur sa machine XP.
Btw: mon système est allemand, donc le dossier s'appelle "Dokumente". Vous devrez peut-être en tenir compte.
Le chemin d'accès à ce dossier est stocké dans
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
sous Personal
. Vous avez cependant besoin d'un accès au registre.
Source: Microsoft
Pour PowerShell les travaux suivants:
[environment]::getfolderpath("mydocuments")
et éviter les chaînes magiques
[Environment]::GetFolderPath([Environment+SpecialFolder]::MyDocuments)
Pour .NET, ce qui suit est vrai (c'est-à-dire que cela ne s'applique pas aux applications toutes Windows):
Comme l’a souligné une réponse, il n’existe pas de variable d’environnement pointant vers Mes documents, mais il existe Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
(C #) pour .NET.
J'ajoute cette réponse car cette question est posée lorsque vous recherchez Google, des variables d'environnement et mes documents, la réponse de Justin ne contient pas la ligne de code la
L'utilisation de la ligne de code mentionnée ci-dessus est le moyen préféré d'accéder à mes documents dans .NET :)
Copier coller cette ligne pour une utilisation en C #:
var directoryNameOfMyDocuments = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Notez que C # a besoin d'un D majuscule dans MyDocuments.
Il n'y a pas de variable d'environnement intégrée, mais dans PowerShell, vous pouvez trouver l'emplacement avec:
[Environment]::GetFolderPath("mydocuments")
Vous pouvez aussi évidemment créer une variable d’environnement avec:
$env:DOCUMENTS = [Environment]::GetFolderPath("mydocuments")
(Juste pour réitérer les réponses précédentes) Il n'y a pas de variable d'environnement fournie prête à l'emploi (WinXP) pour le répertoire "Mes documents".
Cependant, vous pouvez définir une variable à l'aide de la commande suivante:
for /f "tokens=3* delims= " %a ^
in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') ^
do (set mydocuments=%a %b)
ou (une doublure)
for /f "tokens=3* delims= " %a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do (set mydocuments=%a %b)
Ce qui vous donnerait alors une variable %mydocuments%
:
C:\>echo mydocuments="%mydocuments%"
mydocuments="C:\pathto\My Documents"
(Quelqu'un utilise-t-il XP/Vista? Si oui, vous pouvez le tester et nous dire si cela fonctionne?)
Si vous tapez:
set
Dans une invite de commande, vous obtiendrez une liste de toutes les variables d'environnement définies sur votre système.
En regardant ceux définis sur le mien (Windows 7 Home Premium), aucun ne semble pointer vers Mes documents.
FYI:
La fonction SHGetSpecialFolderPath peut être utilisée pour obtenir le chemin du répertoire Mes documents. Sinon, la méthode Environment.GetFolderPath peut être utilisée sous .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
comme vous pouvez le constater, une telle variable n'existe pas.
En plus des réponses basées sur registry , .NET et PowerShell , vous pouvez également utiliser WshSpecialFolders
from WSH . Voici un script de commande/batch autonome montrant comment:
@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
Il émet un script WSH en JScript et l'utilise pour obtenir un ou plusieurs chemins d'accès aux jetons de dossier spéciaux fournis en tant qu'arguments. En supposant que vous sauvegardiez le script ci-dessus dans un fichier appelé specialf.cmd
, le chemin d'accès au répertoire de documents de l'utilisateur actuel serait le suivant:
specialf MyDocuments
Voici une autre utilisation testant tous les jetons de dossier spéciaux:
specialf ^
AllUsersDesktop ^
AllUsersStartMenu ^
AllUsersPrograms ^
AllUsersStartup ^
Desktop ^
Favorites ^
Fonts ^
MyDocuments ^
NetHood ^
PrintHood ^
Programs ^
Recent ^
SendTo ^
StartMenu ^
Startup ^
Templates
Vous pouvez utiliser ceci pour capturer une variable d'environnement comme celle-ci:
for /f "delims=/" %p in ('specialf MyDocuments') do @set MYDOCS=%p
Une certaine confusion peut être due à la disponibilité des valeurs CSIDL/KNOWNFOLDERID et des variables d’environnement de commande Shell.
Réponse @NickGrealy améliorée:
reg query
sortiesempty_line reg_key_path name nom valeur
%a %b
n'est pas correcte dans ce casUtilisez donc l'option skip=2
pour ignorer les premières lignes et l'option tokens=2*
pour transmettre une valeur de registre au %b
var:
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"
ou pour les fichiers de script:
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"
Mais en tenant compte de la valeur de registre [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\!Do not use this registry key]
Basé sur la réponse de @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"
Pour un fichier batch sous Windows 7 (au moins), la solution de Nick G nécessite un léger ajustement pour définir la variable UserDocuments définie par l'utilisateur:
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)
Notez que les seules différences sont,
Pour éviter de voir la ligne, mais pour voir les résultats, utilisez:
@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%
Merci Nick G. Votre réponse m'a beaucoup appris. J'espère que ça aidera quelqu'un d'autre.
Testé et fonctionnant sous Win XP, Vista, 8, 8.1 et 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
Il n’existe pas, par conception, de variable d’environnement de documents dans Windows. Vous devez en créer un personnalisé. Faites ceci en allant ici . Définissez une variable d’environnement appelée MYDOCUMENTS afin de référencer l’emplacement auquel vous souhaitez faire référence. Ensuite, il doit s'agir d'une variable d'environnement à laquelle vous faites référence par% MYDOCUMENTS%.
mettre à jour le fichier batch Windows (.bat) ou le script de commande Windows (.cmd)
@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
Voici la liste complète des variables utilisateur pour tous les utilisateurs exécutant Windows.
La partie du code de requête reg trouvera cette valeur et la définira afin qu'elle puisse être utilisée immédiatement et permettre aux autres codes de la définir de manière permanente pour tous les utilisateurs . La partie du code du registre des annonces l'activera pour tous les utilisateurs. Avec setx, vous n'avez pas besoin de vous déconnecter et de vous reconnecter pour pouvoir utiliser les codes.
Les variables utilisateur actuelles ne s'appliquent qu'à la personne qui a installé ce code.
@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
Fichier de commandes Windows (.bat) ou script de commande Windows (.cmd)
@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