Prompt de comando do Windows - Obter a pasta Documentos do usuário realocado

8

Estou tentando escrever um script em lote simples que copia alguns arquivos do diretório %userprofile%\Documents . Estou testando o script na minha máquina, mas depois de algumas falhas, percebi que mudei os dados do meu usuário para uma partição separada . Portanto, %userprofile%\Documents é empty e (obviamente) nada é copiado.

Já experimentei outras variáveis de ambiente, como %homedrive% e %homepath% , mas elas ainda apontam para o padrão C:\...

Existe uma maneira de descobrir a unidade real usada para os dados do usuário?

Estou usando o Windows 10.

Obrigado!

EDITAR

Como apontado por Ƭᴇcʜιᴇ007, não movi os dados do usuário para outra partição, mas apenas mudei as pastas "principais" (Documentos, Vídeos, ...) para algumas pastas correspondentes em outra partição: clique com o botão direito do mouse em (por exemplo) Documentos, Propriedades, Caminho.

Como posso descobrir o caminho de uma pasta de documentos que foi realocada dessa maneira?

    
por Alessandro 06.10.2016 / 23:28

2 respostas

5

Infelizmente, não há uma variável de ambiente simples que você possa verificar em um script em lote se você redirecionou isso do caminho padrão relativo ao seu perfil. Você pode ver a lista completa de variáveis de ambiente (incluindo algumas não documentadas) aqui:

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

Outra coisa a ter em mente é que o redirecionamento de pastas permite até mesmo movê-los para um compartilhamento de rede. Não tem que haver uma "unidade", você pode usar todos; pode ser apenas um caminho UNC.

A boa notícia é que as informações que você deseja estão disponíveis no registro no seguinte local:

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

Há um conjunto inteiro de pastas que você pode mover na chave User Shell Folders , mas ler a pasta Meus documentos aqui usando o Windows Batch tem esta aparência:

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

Na minha máquina, isso produz a seguinte saída, que pode ser mais ou menos útil para você, dependendo do que você precisa e do quão bom você é com os scripts de lote do Windows:

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

Você também pode tentar vbscript:

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

ou Powershell:

[Environment]::GetFolderPath('MyDocuments')

Isso pode eventualmente estar disponível via bash no Windows, também (de verdade!), mas eu ainda não vi como fazer isso de uma maneira que seja consistentemente precisa.

    
por 07.10.2016 / 01:27
3

Supondo que você tenha acesso de gravação à pasta atual ou a algum local conhecido no computador ... você pode usar o PowerShell!

A função Environment.GetFolderPath pode obter o caminho do sistema de arquivos de locais conhecidos , incluindo a pasta Documentos. Este comando do PowerShell imprime o caminho dos documentos:

[Environment]::GetFolderPath('MyDocuments')

Ele pode ser gravado em um arquivo com o cmdlet Out-File . O operador de redirecionamento > realmente não funciona aqui porque produz um arquivo de texto Unicode com uma BOM, que é difícil trabalhar com o processador em lote.

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

Esse arquivo pode ser lido em uma variável em lote com set /p . Juntando tudo, obtemos este fragmento de script em lote:

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

O caminho para a pasta Documentos do usuário agora pode ser expresso como %DOCSPATH% .

    
por 07.10.2016 / 00:52