localizando a pasta de documentos do usuário no script .bat

4

Qual é a melhor maneira de encontrar a pasta Documentos do usuário no XP e no Vista a partir de um script em lote? É seguro assumir que é% USERPROFILE% \ Documents?

    
por lajos 21.05.2009 / 21:05

10 respostas

7

Uma referência completa das variáveis de ambiente pode ser encontrada aqui, no site da microsoft , 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 da pasta Meus Documentos não estar no local padrão, extrair as informações da chave de registro é provavelmente a maneira mais confiável.

    
por 21.05.2009 / 21:21
7

para que minha versão final seja assim:

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

em que o caractere entre delims = e o seguinte "é uma única guia. Certifique-se de que seu editor emita uma guia e não espaços.

EDITAR: No Windows 7 (e talvez em todas as janelas), você não deve especificar delims = de forma alguma, já que o padrão é o espaço em branco usado entre os tokens e não apenas uma tabulação.

    
por 29.09.2010 / 17:39
1

São apenas "Meus Documentos", etc. em janelas em inglês. Se você estiver usando outro idioma, o nome do caminho é "traduzido" (exceto no Vista)

    
por 01.09.2009 / 16:55
1

A melhor maneira de determinar a localização dos Meus Documentos é no Registro do Windows.

Várias outras respostas e comentários nesta página fizeram referência ao uso de "reg query". Abaixo está a implementação correta que leva em conta os espaços no caminho, bem como diferentes versões 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 one-liner para escritores de script:

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

Este não leva em conta a localização ou a 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.

Este funciona para o Windows XP, o Windows Vista, o Windows 7 e o Windows 8.

Observação: O uso do asterisco na opção tokens = é importante para o Windows XP, que geralmente contém espaços no caminho para Meus documentos.

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

link

tokens=3* will process the third token and the 4th + all subsequent items, this can also be written as tokens=3,*

Each token specified will cause a corresponding parameter letter to be allocated. The letters used for tokens are case sensitive.

If the last character in the tokens= string is an asterisk, then additional parameters are allocated for all the remaining text on the line.

A primeira variável é declarada na instrução FOR e as variáveis 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 instrução FOR, %% B e %% C serão declarados implicitamente. Da mesma forma, declarando %% X na instrução FOR, %% Y e %% Z serão declarados implicitamente.

    
por 25.06.2015 / 17:52
0

Esse será o lugar que o sistema conhece (embora sejam Meus Documentos no XP), mas você terá que julgar por si mesmo se é ou não uma suposição segura para o seu ambiente. Se você usar o redirecionamento Meus Documentos, no entanto, essa variável deve ser definida para o redirecionamento para o padrão definido como c: \ documentos e configurações [nome de usuário] no XP ou c: \ users [nome de usuário] no Vista.

    
por 21.05.2009 / 21:10
0

não é seguro para o xp, lá estão os meus documentos e é localizável.

    
por 21.05.2009 / 21:11
0

O Windows XP o nomeia como 'Meus Documentos' e o Vista o nomeia como 'Documentos'. Você pode colocar um script para determinar qual SO está sendo executado.

@echo off
IF EXIST "%USERPROFILE%\My Documents" (
    echo Windows XP
) ELSE (
    echo Vista
)
    
por 21.05.2009 / 21:13
0
: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 botão GETSource como esta wenpage não pode exibir caracteres de resposta são removidos!

    
por 20.03.2012 / 08:37
0

Para todos que, como eu, tropeçam neste post enquanto procuram uma maneira de simplesmente obter a pasta de documentos de usuários, tendo quase zero de experiência em arquivos de lote, mas querem usar a ótima solução por Werkkrew ou (provavelmente?) a versão derivada do user55644, foi assim que eu fiz isso funcionar 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%
    
por 29.07.2015 / 10:40
0

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 de que no Windows Vista os diretórios Videos , Music e Photos estão todos em C:\Users\[%USERNAME]

    
por 21.05.2009 / 21:14