4 votes

Comment puis-je déterminer l'emplacement du dossier Documents de l'utilisateur actuel à partir d'un script batch Windows ?

Je sais que je pourrais utiliser %userprofile%\Documents mais cela ne fonctionne que si le dossier Documents se trouve toujours à l'emplacement par défaut. Je recherche quelque chose qui fonctionne même si l'utilisateur a modifié l'emplacement (c'est-à-dire à partir de l'onglet Emplacement dans les propriétés des documents).

4voto

iTwasnTme Points 5586

Pourquoi ne pas lire cette information là où elle est enregistrée directement dans le registre de Windows :

HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

enter image description here

@echo off && setlocal enabledelayedexpansion

set "_Key_HKCU_Path=HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
set "_Folders_Refer={374DE290-123F-4565-9164-39C4925E467B},Documments,Desktop,Favorites,My Music,My Pictures,My Video,Personal,Programs,Start Menu,Startup"

(for %%i in ("!_Folders_Refer:,=","!")do call :^) %%~i) && endlocal && goto :EOF

:^)
for /f tokens^=3* %%i in ('%__APPDIR__%reg.exe query "!_Key_HKCU_Path!"^|find/i "%~1"
')do <con: set "_user_path=%%i%%j" && cmd /v/c "echo\!_user_path:REG_EXPAND_SZ=! && exit /b"
  • Produit des résultats :

    C:\Users\ecker\Downloads C:\Users\ecker\Desktop C:\Users\ecker\Favorites C:\Users\ecker\Music C:\Users\ecker\Pictures C:\Users\ecker\Videos C:\Users\ecker\Music C:\Users\ecker\Pictures C:\Users\ecker\Videos C:\Users\ecker\Music C:\Users\ecker\Pictures C:\Users\ecker\Videos C:\Users\ecker\Documents C:\Users\ecker\AppData\Roaming\Microsoft\Windows\StartMenu\Programs C:\Users\ecker\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup C:\Users\ecker\AppData\Roaming\Microsoft\Windows\StartMenu\Programs C:\Users\ecker\AppData\Roaming\Microsoft\Windows\Start Menu C:\Users\ecker\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup C:\Users\ecker\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup

enter image description here


Pour le seul dossier Personal/Documents :

@echo off && setlocal enabledelayedexpansion

set "_Key=HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"

for /f tokens^=3 %%i in ('%__APPDIR__%reg.exe query "!_Key!"^|find/i "Personal"')do <con: call set "_docs_folder=%%~i"

if exist "!_docs_folder!\My_File.docx" (
     echo\!_docs_folder!\My_File.docx 
     echo\File exist
   ) else (
     echo\!_docs_folder!\My_File.docx 
     echo\File do not exist
   )

endlocal && goto :EOF
  • Résultats de sortie :

    C:\Users\ecker\Documents

Obs.. : 1 Utilisez <con: call con set "_docs_folder=%%~i" pour développer le chemin complet dans la variable %%~i ( %UserProfile%\Documents ) à C:\Users\ecker\Documents

Obs.. : 2 Votre code ( powershell con chauve-souris / cmd ) fonctionne très bien ( pour le nom d'utilisateur/dossier sans espace ), et on peut aussi l'écrire de cette façon :

@echo off 

for /f tokens^=* %%a in ('powershell -co [Environment]::GetFolderPath('Personal'^)
')do set "docs_folder=%%a" & if exist "%docs_folder%\*.*" echo\"%docs_folder%\*.*"

enter image description here

Envisagez d'utiliser tous les ( * ), car tokens^=* garantit que tous les caractères de la variable de la boucle ( %%i ) sont pris pour composer la valeur dans la variable, y compris les délimiteurs standards, comme l'espace (par exemple), et si le nom d'utilisateur en contient, sans tokens^=* seul le premier jeton sera effectivement utilisé (par défaut), et dans sa sortie/variable, il manquera les caractères supplémentaires.


2voto

Beginners Points 13

J'ai trouvé un moyen qui fonctionne pour moi :

for /f usebackq %%a in (
    `powershell -command "[Environment]::GetFolderPath('Personal')"`
) do (set "docs_folder=%%a")
echo %docs_folder%

1voto

Keith Miller Points 6004

Sous Windows 10, il est préférable d'utiliser PowerShell :

Vous pouvez interroger le registre :

(Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders').Personal

     - or -

$Key = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders'
(gp $Key).Personal

Ou bien interrogez le Shell :

(New-Object -ComObject Shell.Application).Namespace("shell:Personal").Self.Path

Sortie :

PS C:\> (Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders').Personal
C:\Users\keith\Documents
PS C:\>
PS C:\> (New-Object -ComObject Shell.Application).Namespace("shell:Personal").Self.Path
C:\Users\keith\Documents
PS C:\>

-1voto

Dee Wolf Points 31

@Tim

Votre ou vos navigateurs enregistrent l'emplacement de vos téléchargements par défaut. Par exemple, dans Chrome v83, je peux trouver mon dossier de téléchargements en cherchant dans... C:\Users\UserName\AppData\Local\Google\Chrome\User Données \Default\Preferences

Cherchez "répertoire_par_défaut" (y compris les guillemets).

Dans mon cas, l'emplacement des téléchargements par défaut est le suivant E:\DNLDS et j'ai trouvé la chaîne suivante dans mon Préférences fichier :

"default_directory" :" E:\DNLDS "

Note : dans la ligne ci-dessus, le logiciel du forum a supprimé le double backslash de ma réponse. La chaîne réelle trouvée dans Préférences contient deux barres obliques inversées après le nom du disque (E) comme dans...

"default_directory":"E:\\DNLDS"

D'autres navigateurs utilisent des emplacements différents pour les préférences ou les profils, mais ils doivent tous stocker l'emplacement cible pour les fichiers que vous téléchargez depuis le web.

Sachez que certaines personnes définissent plusieurs profils sur un PC donné. Votre fichier batch peut avoir besoin de télécharger un fichier de test (avec un nom unique) et de rechercher tous les emplacements par défaut pour déterminer lequel est le profil par défaut actuel. De même, certaines personnes définissent différents emplacements de téléchargement par défaut dans différents navigateurs sur le même PC. Autrement dit, certains utilisateurs ont plusieurs emplacements de téléchargement par défaut.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X