Símbolo del sistema de Windows: obtenga la carpeta Documentos del usuario reubicado

8

Estoy tratando de escribir un script por lotes simple que copia algunos archivos del %userprofile%\Documentsdirectorio. Estoy probando el script en mi máquina, pero después de algunas fallas me di cuenta de que moví los datos de mi usuario a una partición separada . Por lo tanto, %userprofile%\Documentsestá vacío y (obviamente) no se copia nada.

Ya probé otras variables de entorno como %homedrive%y %homepath%, pero todavía apuntan al estándarC:\...

¿Hay alguna manera de averiguar la unidad real utilizada para los datos del usuario?

Estoy usando Windows 10.

¡Gracias!

EDITAR

Como señaló Ƭᴇcʜιᴇ007, no moví los datos del usuario a otra partición, sino que simplemente reubiqué las carpetas "principales" (Documentos, Videos, ...) a algunas carpetas correspondientes en otra partición: haga clic derecho en (p. Ej. ) Documentos, Propiedades, Ruta.

¿Cómo puedo encontrar la ruta de una carpeta de documentos que se ha reubicado de esta manera?

Alessandro
fuente
2
% userprofile% debe tener la carpeta correcta independientemente de dónde la coloque, siempre y cuando haya reubicado las carpetas de perfil correctamente, debe ser precisa. Entonces, ¿cómo exactamente lo moviste a la otra partición?
Ƭᴇcʜιᴇ007
Ok, honestamente no lo recordaba, así que busqué un poco y finalmente descubrí lo que hice. Hice clic derecho en las carpetas "principales" (Documentos, Videos, etc.), seleccioné Propiedades, seleccioné la pestaña Ruta y cambié la ruta. (Estoy usando la versión italiana de Windows, y como apenas traduzco los nombres que veo en mi pantalla, algunas palabras podrían ser diferentes). Así que tenías razón,% userprofile% no está haciendo nada mal. Pero la pregunta sigue siendo: ¿cómo puedo encontrar la ruta real de la carpeta de documentos "principal"?
Alessandro
Entonces creo que está confundiendo su "biblioteca" de Documentos con la carpeta Documentos en la ruta de su perfil de usuario. Dos cosas diferentes ...
Ƭᴇcʜιᴇ007
¿Hay alguna forma de averiguar la ruta de la carpeta Documentos, teniendo en cuenta que se ha reubicado de esta manera?
Alessandro

Respuestas:

5

Desafortunadamente, no hay una variable de entorno simple que pueda verificar desde un script por lotes si ha redirigido esto desde la ruta predeterminada en relación con su perfil. Puede ver la lista completa de variables de entorno (incluidas algunas no documentadas) aquí:

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

Otra cosa a tener en cuenta es que la redirección de carpetas incluso le permite moverlos a un recurso compartido de red. No tiene que haber una "unidad" que pueda usar todo; podría ser una ruta UNC.

La buena noticia es que la información que desea está disponible en el registro en la siguiente ubicación:

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

Hay un conjunto completo de carpetas que puede mover en esa User Shell Folderstecla, pero para leer la carpeta Mis documentos aquí usando Windows Batch se ve así:

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

En mi máquina, esto produce el siguiente resultado, que puede ser más o menos útil para usted según lo que necesite y lo bueno que sea con los scripts de Windows Batch:

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

También puedes probar vbscript:

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

o Powershell:

[Environment]::GetFolderPath('MyDocuments')

Eventualmente, esto también puede estar disponible a través de bash en Windows (¡de verdad!), Pero aún no he visto cómo hacerlo de una manera que sea consistentemente precisa.

Joel Coehoorn
fuente
3

Suponiendo que tiene acceso de escritura a la carpeta actual o a alguna ubicación existente conocida en la computadora ... ¡puede usar PowerShell!

La Environment.GetFolderPathfunción puede obtener la ruta del sistema de archivos de ubicaciones conocidas , incluida la carpeta Documentos. Este comando de PowerShell imprime la ruta de Documentos:

[Environment]::GetFolderPath('MyDocuments')

Se puede escribir en un archivo con el Out-Filecmdlet. El operador de redirección >realmente no funciona aquí porque produce un archivo de texto Unicode con una BOM, que es difícil de trabajar en el procesador por lotes.

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

Ese archivo se puede leer en una variable por lotes con set /p. Poniendo todo junto, obtenemos este fragmento de secuencia de comandos por lotes:

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

La ruta a la carpeta Documentos del usuario ahora se puede expresar como %DOCSPATH%.

Ben N
fuente
1

Tengo la respuesta confiable. Combinación de powershell que devuelve la respuesta a 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
fuente
No sabía que puede usar un $en un nombre de variable CMD. Pero sabes que es un uso poco común, ¿verdad?
Scott
0

Bueno, es bastante simple :)

La ubicación de la carpeta del escritorio se enumera aquí:

\ HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Carpetas de Shell

o incluso más simple en PowerShell

$ DesktopPath = [Entorno] :: GetFolderPath ("Escritorio")

integratorIT
fuente