ti-enxame.com

Encontrando a pasta de documentos do usuário em script .bat

Qual é a melhor maneira de encontrar a pasta de documentos de um usuário XP e Vista de um script de lote? É seguro assumir que é% é% userprofile%\documentos?

4
lajos

Uma referência completa das variáveis ​​de ambiente pode ser encontrada aqui, no Microsoft Site , ele também pode ser encontrado em uma chave de registro.

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
String value: Personal

No caso de a pasta Minha documentos não estiver no local padrão, puxando as informações que a chave do Registro é provavelmente a maneira mais confiável.

7
WerkkreW

então, minha versão final se parece com isso:

Para/f "tokens = 3 delims =" %% g em ('reg consulta "hkcu\software\Microsoft\Windows\CurrentVersion\Explorer\Shell Pasters"/v "Personal"') Do (set docsdir = %% g)

onde o personagem entre delims = e o seguinte "é uma única guia. Verifique se o seu editor emite uma guia e não os espaços.

EDIT: No Windows 7 (e talvez todas as janelas), você não deve especificar delims = em tudo, pois é padronizado para o qual é o espaço em branco usado entre os tokens e não apenas uma guia.

7
user55644

A melhor maneira de determinar a localização dos meus documentos é do Registro do Windows.

Várias outras respostas e comentários nesta página fizeram referência a usar "reg consulta". Abaixo está a implementação correta que leva em conta espaços no caminho, bem como versões diferentes do Windows:

for /f "tokens=1,2*" %%A in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal" 2^>nul') do (
   set RNAME=%%A
   set RTYPE=%%B
   set RDATA=%%C
)

Aqui está o um-liner para escritores de scripts:

for /f "tokens=1,2*" %%A in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal" 2^>nul') do set MY_DOCS_ROOT=%%C

Isso não Leva em conta a localização ou internacionalização. Isso não foi testado em versões não inglesas do Windows. Comentários sobre esse tópico são bem-vindos.

Isso faz funciona para o Windows XP, Windows Vista, Windows 7 e Windows 8.


Nota: Usando o asterisco na opção Tokens = é importante para o Windows XP, que geralmente contém espaços no caminho para os meus documentos.

Nota: Se estiver usando variáveis ​​implícitas como %% B e %% C parece um pouco estranho, você pode dar uma olhada neste artigo:

http://ss64.com/nt/for_f.html

tokens = 3 * irá processar o terceiro token e o 4º + todos os itens subseqüentes, isso também pode ser escrito como tokens = 3, *

Cada token especificado fará com que uma carta de parâmetro correspondente seja alocada. As letras usadas para tokens são sensíveis a maiúsculas e minúsculas.

Se o último caractere no tokens = string é um asterisco, os parâmetros adicionais serão alocados para todo o texto restante na linha.

A primeira variável é declarada na declaração para as variáveis ​​e subseqüentes serão implicitamente declaradas através da opção Tokens =.

O artigo vinculado fornece a ordem exata das variáveis ​​que serão declaradas implicitamente, mas é essencialmente alfabético.

(com três tokens, declarando %% A na declaração, %% B e %% C serão declarados implicitamente. Da mesma forma, declarando %% x na declaração, %% Y e %% z será declarado implicitamente.)

1
JonathanDavidArndt

São apenas "meus documentos" etc no Windows Inglês. Se você estiver usando outro idioma, o nome do caminho é "traduzido" (exceto no Vista)

1
fsp

Para todos os que, como eu, tropeçar nesta postagem enquanto procura uma maneira de simplesmente obter a pasta de documentos dos usuários, tendo ao lado da experiência zero sobre arquivos em lote, mas quer usar a grande solução de Werkkrew ou (provavelmente?) A versão derivada Por User55644, é assim que eu consegui trabalhar no meu Windows 7 PC:

echo off

setlocal enableextensions enabledelayedexpansion


FOR /F "tokens=3" %%G IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') DO (SET targetdir=%%G)
echo on

echo %targetdir%
0
aeglasin

Esse será o lugar que o sistema sabe sobre (embora seja meus documentos no XP), no entanto, você terá que julgar por se é ou não uma suposição segura para o seu ambiente. Se você usar o redirecionamento do meu documento, porém, essa variável deve ser definida para o que você redirecionar com o conjunto padrão para c:\documentos e configurações [Nome de usuário] em XP ou C:\Usuários [ Nome de usuário] no Vista.

0
squillman

não é seguro para o XP, há meus documentos e é localizável.

0
Alexander Taran

Windows XP Nomes Ele "Meus Documentos" e Vista nomeia "Documentos". Você pode colocar em um script para determinar qual sistema operacional você está em execução.

@echo off
IF EXIST "%USERPROFILE%\My Documents" (
    echo Windows XP
) ELSE (
    echo Vista
)
0
Jack B Nimble

No Windows Vista, é

%USERPROFILE%\Documents

mas no Windows XP, é

%USERPROFILE%\My Documents

Essa é a única diferença entre os dois sistemas operacionais diferentes.

E não se esqueça que no Windows Vista o Videos, Music e Photos diretórios estão todos sob C:\Users\[%USERNAME]

0
JFV
:getuserdoc folder from registry
set idkey="HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
call:fetchvalue errorlevelvariable %idkey% Personal
goto:eof
errorlevel is set if fail
:fetchvalue
 set /a %1=0
 REG query %2 /v %3
 if ERRORLEVEL 1 (set /a %1=1&goto :eof)
 FOR /F "tokens=3* skip=2 delims=   " %%A IN ('REG QUERY %2 /v %3') DO SET %3="%%A"
goto:eof

Use o Button GetSource, pois esta página da Web não pode exibir os caracteres de resposta são removidos!

0
dod destroyer