Logo Hardware.com.br
fe_gw
fe_gw Novo Membro Registrado
18 Mensagens 1 Curtida

Caminho da pasta Meus Documentos parar usar em .bat

#1 Por fe_gw 21/05/2010 - 13:40
Não sei se posto nesta seção, mas...

Estou criando um arquivo bat que deve copiar um arquivo para a pasta"meus documentos" do usuário.

O problema é que, se for usar em outro computador, o caminho pra essa pasta será diferente.

Por exemplo copiar esse arquivo teste.txt para meus documentos:

Primeiramente o meu nome de usuário é User e o nome de usuário em outro computador será diferente.

Ainda tem o problema que no Windows 7 (que eu uso) o caminho pra a pasta do usuário é C:\Users\nome do usuário ao contrário do Windows XP: C:\Documents and Settings\nome do usuario

Eu fiz:

[code=rich]
@echo off
xcopy "C:\teste.txt" "C:\Users\User\Documents"
exit
[/code]Alguém sabe de alguma solução?

Obrigado
Responder
Pedro Jotha
Pedro Jotha General de Pijama Registrado
4.3K Mensagens 152 Curtidas
#2 Por Pedro Jotha
21/05/2010 - 13:43
Variável %userprofile% é o caminho da pasta de usuário, no seu caso C:\Users\User.

Por exemplo:
xcopy C:\teste.txt %userprofile%\Documentos

Obs: não entendi o porquê das aspas... Batch não precisa disso.
xcopy "C:\teste.txt" "%userprofile%\Documentos" pode ser escrito xcopy C:\teste.txt %userprofile%\Documentos que dá no mesmo, e você economiza caracteres.


[]'s
...de volta ao FGdH
Phenom II X3 720 @ X4 core unlocked | GA-78LMT USB3 R2 | 2x4GB DDR3 Kingston 1333MHz | GTX 1050 2GB GDDR5 | Corsair CX430
fe_gw
fe_gw Novo Membro Registrado
18 Mensagens 1 Curtida
#3 Por fe_gw
21/05/2010 - 13:51
Pedro Jotha disse:
Variável %userprofile% é o caminho da pasta de usuário, no seu caso C:\Users\User.

Por exemplo:
xcopy C:\teste.txt %userprofile%\Documentos

Obs: não entendi o porquê das aspas... Batch não precisa disso.

[]'s


Ah, obrigado!
Só um probleminha: o %userprofile% vai ser a pasta do usuário, mas no Windows 7 a pasta do Meus Documentos, dentro da pasta do usuario é "Documents", diferente do XP que é "Meus Documentos" memso.

O que eu faço?

* Quanto às aspas: eu nao sei muita coisa de batch, eu achei um modelo assim na internet, mas funciona.
"Was glänzt ist für den Augenblick geboren; das Echte bleibt der Nachwelt unverloren" - Goethe
Pedro Jotha
Pedro Jotha General de Pijama Registrado
4.3K Mensagens 152 Curtidas
#4 Por Pedro Jotha
21/05/2010 - 17:38
fe_gw disse:
Ah, obrigado!
Só um probleminha: o %userprofile% vai ser a pasta do usuário, mas no Windows 7 a pasta do Meus Documentos, dentro da pasta do usuario é "Documents", diferente do XP que é "Meus Documentos" memso.

O que eu faço?

* Quanto às aspas: eu nao sei muita coisa de batch, eu achei um modelo assim na internet, mas funciona.

Em batch não é necessário aspas, pode parar de usá-las. Deixa o código mais limpo sem elas (se você já estiver acostumado, também não tem problema, funciona do mesmo jeito).

Já que há a diferença, é necessário então descobrir qual é a pasta. Fiz um código, veja se funciona.

[CODE=rich]@echo off
if not "%os%"=="Windows_NT" goto soerrado
if not exist %userprofile%\Documents\*.* goto xp
if not exist %userprofile%\Documentos\*.* goto seven

:xp
xcopy C:\teste.txt %userprofile%\Documentos
goto fim

:seven
xcopy C:\teste.txt %userprofile%\Documents

:soerrado
echo Este programa precisa de Windows 2000 ou superior.
goto fim

:fail
echo Erro no processo: Impossivel achar pasta de documentos!

:fim
[/CODE]
Teste aí e me diz se funcionou.

[]'s
...de volta ao FGdH
Phenom II X3 720 @ X4 core unlocked | GA-78LMT USB3 R2 | 2x4GB DDR3 Kingston 1333MHz | GTX 1050 2GB GDDR5 | Corsair CX430
Pedro Jotha
Pedro Jotha General de Pijama Registrado
4.3K Mensagens 152 Curtidas
#9 Por Pedro Jotha
23/05/2010 - 19:10
Fergo disse:
As aspas são importantes por questões de compatibilidade com versões mais antigas do sistema. Atualmente não são mais necessárias, mas é uma boa prática.

Fergo

Desculpe, Fergo, mas vou ter que descordar com você. Programo batch desde o MS-DOS 5.0 passando por Win95, 98, Me, XP, e 7 e nunca tive que utilizar as tais aspas. Só se for coisa anterior ao MS-DOS 4.x, daí eu realmente não sei, mas não creio que ele vá usar esse arquivo num DOS 4.x ou inferior, até mesmo porque nem funcionaria (não existe a variável %userprofile%).

Gokuro disse:
Se alguém souber como obter o diretório de um batch em execução compartilhe conosco por favor. Esse é um problema antigo que retomo p/Win Vista/7.

[]'s

Realmente até onde eu sei não há como fazer, mas por exemplo, se você tem um arquivo .bat (batch.bat) num diretório (C:\), e quer chamar outro .bat (chamado.bat) que está num diretório dentro desse diretório (C:\diretorio), você pode usar:

call /diretorio/chamado.bat

[]'s
...de volta ao FGdH
Phenom II X3 720 @ X4 core unlocked | GA-78LMT USB3 R2 | 2x4GB DDR3 Kingston 1333MHz | GTX 1050 2GB GDDR5 | Corsair CX430
Fergo
Fergo Highlander Registrado
9.3K Mensagens 1.1K Curtidas
#10 Por Fergo
23/05/2010 - 19:34
Pedro Jotha disse:
Desculpe, Fergo, mas vou ter que descordar com você. Programo batch desde o MS-DOS 5.0 passando por Win95, 98, Me, XP, e 7 e nunca tive que utilizar as tais aspas. Só se for coisa anterior ao MS-DOS 4.x, daí eu realmente não sei, mas não creio que ele vá usar esse arquivo num DOS 4.x ou inferior, até mesmo porque nem funcionaria (não existe a variável %userprofile%).


Se o caminho contém espaços você vai ter problemas se não colocá-lo entre áspas. O prompt só passou a ser "esperto" e entender o que é caminho e o que é argumento no XP se não me falha a memória. Win9x, DOS e o prompt do Win2k (se não me engano) vão tratar caminhos com espaços sem estar entre aspas como argumentos separados. Ex:


copy C:\Arquivos de Programas\teste.exe C:\teste.exe
As versões antigas vão entender que "C:\Arquivos", "de", "Programas\teste.exe" e "C:\teste.exe" são todos argumentos do copy, resultando em erro.

Se você colocar:


copy "C:\Arquivos de Programas\teste.exe" "C:\teste.exe"
Aí sim ele consegue identificar o caminho corretamente.

Gokuro disse:

Se alguém souber como obter o diretório de um batch em execução compartilhe conosco por favor. Esse é um problema antigo que retomo p/Win Vista/7.


É só usar o %0 com modificadores. Fica bem simples e direto. No seu caso, coloque modificador de drive e path: %~dp0
Por exemplo, para imprimir o diretório do batch em execução:


echo %~dp0
pause


Fergo
Site pessoal www.fergonez.net
Portfolio
www.fbirck.com
Artigos
Informática
Pedro Jotha
Pedro Jotha General de Pijama Registrado
4.3K Mensagens 152 Curtidas
#12 Por Pedro Jotha
24/05/2010 - 14:05
Fergo disse:
Se o caminho contém espaços você vai ter problemas se não colocá-lo entre áspas. O prompt só passou a ser "esperto" e entender o que é caminho e o que é argumento no XP se não me falha a memória. Win9x, DOS e o prompt do Win2k (se não me engano) vão tratar caminhos com espaços sem estar entre aspas como argumentos separados. Ex:

[code=rich]
copy C:\Arquivos de Programas\teste.exe C:\teste.exe
[/code]As versões antigas vão entender que "C:\Arquivos", "de", "Programas\teste.exe" e "C:\teste.exe" são todos argumentos do copy, resultando em erro.

Se você colocar:

[code=rich]
copy "C:\Arquivos de Programas\teste.exe" "C:\teste.exe"
[/code]Aí sim ele consegue identificar o caminho corretamente.

Pois é, mas na época do DOS e até o Win 3.11 não era permitido pasta com espaços. E depois disso, mesmo com o Win 95 permitindo LFN e SFN ainda era necessário usar pelo DOS o nome compacto de oito caracteres, pois o Win 95 rodava sobre um DOS sem suporte a LFN e SFN, logo, se usasse com as aspas como no exemplo que você deu ele iria dar erro. No caso, usando o mesmo exemplo, o correto ficaria:
[code=rich]copy C:\ARQUIV~1\teste.exe C:\teste.exe[/code]No Windows 98 nunca usei com aspas, mas também nunca usei pastas com espaço, sempre usei como o exemplo acima. Realmente não tenho como saber se funcionava sem as aspas.

No 2K ele já suporta nomes com espaços sem entender como argumento (ele usa o mesmo prompt que é usado no XP).

Muito obrigado pela informação do %~dp0!Eu procurei isso por décadas!

[]'s
...de volta ao FGdH
Phenom II X3 720 @ X4 core unlocked | GA-78LMT USB3 R2 | 2x4GB DDR3 Kingston 1333MHz | GTX 1050 2GB GDDR5 | Corsair CX430
roney477
roney477 Membro Junior Registrado
55 Mensagens 4 Curtidas
#13 Por roney477
25/05/2010 - 03:44
Gokuro disse:
Uso apenas Linux e não posso afirmar com certeza, mas experiemente usar o comando SET sem argumentos.

Referências:

Microsoft Windows XP - Command shell overview

Environment Variables in Windows XP

Se alguém souber como obter o diretório de um batch em execução compartilhe conosco por favor. Esse é um problema antigo que retomo p/Win Vista/7.

[]'s


Muitíssimo obrigado, me será de grande ajuda.
Responder Tópico
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal