Pedro Jotha
General de Pijama
Registrado
4.3K Mensagens
152 Curtidas
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
fe_gw
Novo Membro
Registrado
18 Mensagens
1 Curtida
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.
Pedro Jotha
General de Pijama
Registrado
4.3K Mensagens
152 Curtidas
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
fe_gw
Novo Membro
Registrado
18 Mensagens
1 Curtida
Funcionou certinho
Valeu!
Fergo
Highlander
Registrado
9.3K Mensagens
1.1K Curtidas
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
roney477
Membro Junior
Registrado
55 Mensagens
4 Curtidas
Retomando o assunto, onde é possível listar as variáveis de ambiente do Windows?
Gokuro
Veterano
Registrado
704 Mensagens
76 Curtidas
Pedro Jotha
General de Pijama
Registrado
4.3K Mensagens
152 Curtidas
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%).
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
Fergo
Highlander
Registrado
9.3K Mensagens
1.1K Curtidas
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.
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
Gokuro
Veterano
Registrado
704 Mensagens
76 Curtidas
Pedro Jotha
General de Pijama
Registrado
4.3K Mensagens
152 Curtidas
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
roney477
Membro Junior
Registrado
55 Mensagens
4 Curtidas