Invite de commandes Windows - Récupérer le dossier Documents de l'utilisateur relocalisé

8

J'essaie d'écrire un script batch simple qui copie certains fichiers du %userprofile%\Documentsrépertoire. Je teste le script sur ma machine, mais après quelques échecs, j'ai réalisé que j'avais déplacé les données de mon utilisateur vers une partition distincte . Par conséquent, %userprofile%\Documentsest vide et (évidemment) rien n'est copié.

J'ai déjà essayé d'autres variables d'environnement telles que %homedrive%et %homepath%, mais elles pointent toujours vers la normeC:\...

Existe-t-il un moyen de connaître le lecteur réel utilisé pour les données de l'utilisateur?

J'utilise Windows 10.

Merci!

ÉDITER

Comme indiqué par Ƭᴇcʜιᴇ007, je n'ai pas déplacé les données de l'utilisateur vers une autre partition, mais je viens de déplacer les dossiers "principaux" (Documents, Vidéos, ...) vers certains dossiers correspondants sur une autre partition: clic droit sur (par exemple ) Documents, propriétés, chemin.

Comment puis-je trouver le chemin d'un dossier de documents qui a été déplacé de cette façon?

Alessandro
la source
2
% userprofile% devrait avoir le bon dossier, peu importe où vous l'avez placé, tant que vous avez déplacé correctement les dossiers de profil, il doit être précis. Alors, comment l'avez-vous déplacé exactement vers l'autre partition?
Ƭᴇcʜιᴇ007
D'accord, honnêtement, je ne m'en souvenais pas, alors j'ai parcouru un peu et j'ai finalement découvert ce que j'avais fait. J'ai fait un clic droit sur les dossiers "principaux" (Documents, Vidéos, etc.), sélectionné Propriétés, sélectionné l'onglet Chemin et changé le chemin. (J'utilise la version italienne de Windows, et comme je traduis à peine les noms que je vois sur mon écran, certains mots peuvent être différents). Vous aviez donc raison,% userprofile% ne fait vraiment rien de mal. Mais la question est toujours: comment trouver le chemin réel du dossier "principal" Documents?
Alessandro
Ensuite, je pense que vous confondez votre "bibliothèque" Documents avec le dossier Documents dans le chemin de votre profil utilisateur. Deux choses différentes ...
Ƭᴇcʜιᴇ007
Existe-t-il un moyen de connaître le chemin du dossier Documents, étant donné qu'il a été déplacé de cette manière?
Alessandro

Réponses:

5

Malheureusement, il n'y a pas de variable d'environnement simple que vous pouvez vérifier à partir d'un script batch si vous l'avez redirigé depuis le chemin par défaut par rapport à votre profil. Vous pouvez voir la liste complète des variables d'environnement (y compris certaines non documentées) ici:

http://ss64.com/nt/syntax-variables.html

Une autre chose à garder à l'esprit est que la redirection de dossiers vous permet même de les déplacer vers un partage réseau. Il n’a pas besoin d’être un «lecteur» que vous pouvez utiliser tous; ce pourrait être juste un chemin UNC.

La bonne nouvelle est que les informations que vous souhaitez sont disponibles dans le registre à l'emplacement suivant:

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ User Shell Folders \ Personal

Il y a tout un ensemble de dossiers que vous pouvez déplacer dans cette User Shell Foldersclé, mais pour lire le dossier Mes documents ici à l'aide de Windows Batch, cela ressemble à ceci:

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal

Sur ma machine, cela produit la sortie suivante, qui peut vous être plus ou moins utile selon ce dont vous avez besoin et la qualité de vos scripts Windows Batch:

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ User Shell Folders
    REG_EXPAND_SZ personnel C: \ Users \ joel \ Documents

Vous pouvez également essayer vbscript:

Set wshshell = CreateObject("WScript.Shell")
Documents = wshShell.SpecialFolders("MyDocuments")

ou Powershell:

[Environment]::GetFolderPath('MyDocuments')

Cela peut éventuellement être disponible via bash sur Windows aussi (vraiment!), Mais je n'ai pas encore vu comment le faire d'une manière qui sera toujours précise.

Joel Coehoorn
la source
3

En supposant que vous ayez accès en écriture au dossier actuel ou à un emplacement existant connu sur l'ordinateur ... vous pouvez utiliser PowerShell!

La Environment.GetFolderPathfonction peut obtenir le chemin d'accès au système de fichiers d' emplacements connus , y compris le dossier Documents. Cette commande PowerShell imprime le chemin des documents:

[Environment]::GetFolderPath('MyDocuments')

Il peut être écrit dans un fichier avec l' Out-Fileapplet de commande. L'opérateur de redirection >ne fonctionne pas vraiment ici car il produit un fichier texte Unicode avec une nomenclature, ce qui est difficile à utiliser dans le processeur par lots.

[Environment]::GetFolderPath('MyDocuments') | Out-File 'docspath.tmp' -Encoding ascii

Ce fichier peut être lu dans une variable batch avec set /p. En mettant tout cela ensemble, nous obtenons ce fragment de script batch:

powershell -Command "[Environment]::GetFolderPath('MyDocuments') | Out-File 'docspath.tmp' -Encoding ascii"
set /p DOCSPATH=< docspath.tmp
del docspath.tmp

Le chemin d'accès au dossier Documents de l'utilisateur peut désormais être exprimé sous la forme %DOCSPATH%.

Ben N
la source
1

J'ai la réponse fiable. Combinaison de PowerShell qui renvoie la réponse à dos

for /f "delims=" %%a in ('powershell.exe -command "& {write-host $([Environment]::GetFolderPath('MyDocuments'))}"') do Set "$Value=%%a"
Echo Value received from Powershell : %$Value%
dcshoecomp
la source
Je ne savais pas que vous pouvez utiliser un $dans un nom de variable CMD. Mais vous savez que c'est un usage rare, non?
Scott
0

Et bien c'est assez simple :)

L'emplacement du dossier du bureau est répertorié ici:

\ HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folders

ou encore plus simple dans PowerShell

$ DesktopPath = [Environment] :: GetFolderPath ("Desktop")

integratorIT
la source