Equivalente a xcopy
Moderador: Moderadores
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
Equivalente a xcopy
Caros colegas, existe algum comando e/ou funcao no xharbour equivalente ao comando xcopy?
Preciso criar uma rotina para copiar toda uma estrutura de pastas,subpastas e arquivos, mas gostaria de copiar tudo de uma vez, o comando do MS-DOS xcopy faz exatamente isso, mas eu nao gosto de chamar comandos MS-DOS devido a tela preta que aparece.
Obs.: Pode ser rotina em C ou API do windows.
Obrigado!
Preciso criar uma rotina para copiar toda uma estrutura de pastas,subpastas e arquivos, mas gostaria de copiar tudo de uma vez, o comando do MS-DOS xcopy faz exatamente isso, mas eu nao gosto de chamar comandos MS-DOS devido a tela preta que aparece.
Obs.: Pode ser rotina em C ou API do windows.
Obrigado!
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Re: Equivalente a xcopy
Olá!
Quando preciso executar um comando DOS, para evitar a janela preta, utilizo o parâmetro /B do comando START do DOS (faz com que a tarefa seja executada sem abrir nova janela).
Dê uma olhada na sintaxe do START, digitando START /? numa janela DOS. Veja também os parâmetros e /SEPARATE.
Não conheço comando ou função próprios para executar esta tarefa.TerraSoftware escreveu:eu nao gosto de chamar comandos MS-DOS devido a tela preta que aparece.
Quando preciso executar um comando DOS, para evitar a janela preta, utilizo o parâmetro /B do comando START do DOS (faz com que a tarefa seja executada sem abrir nova janela).
Código: Selecionar todos
RUN "CMD /C START /B XCOPY C:\Teste X:\Teste /S"[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
Re: Equivalente a xcopy
Muito bom colega, obrigado, funcionou em windows com kernel NT, em win98 nao deu certo, pois nele nao existe o cmd.exe, alguma sugestao?
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Re: Equivalente a xcopy
Olá!
Fico feliz que tenha funcionado!
Não tenho como testar no Win98. Tente substituir o RUN Cmd por RUN Command (Lembra-se do velho Command.Com?). Você terá que identificar em qual plataforma sua aplicação está sendo executada...
Fico feliz que tenha funcionado!
Não tenho como testar no Win98. Tente substituir o RUN Cmd por RUN Command (Lembra-se do velho Command.Com?). Você terá que identificar em qual plataforma sua aplicação está sendo executada...
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Equivalente a xcopy
Pode tentar usar o MYRUN() para chamar essa sua rotina sem mostrar nada na tela:
MYRUN("XCOPY C:\Teste X:\Teste /S")
MYRUN("XCOPY C:\Teste X:\Teste /S")
Código: Selecionar todos
**************************
function MYRUN( cComando )
**************************
local oShell, RET
oShell := CreateObject( "WScript.Shell" )
RET := oShell:Run( "%comspec% /c " + cComando, 0, .T. )
oShell := NIL
return iif( RET = 0, .T., .F. ) Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
Re: Equivalente a xcopy
Usar comando de linha em um programa Windows é dose. Melhor seria dedicar um tempo e implementar esse recurso numa função, já que muitas vezes é bem útil. Uma função recursiva pode resolver isso.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Equivalente a xcopy
Concordo com o Maligno, tentei procurar aqui uma função que fiz logo que comecei com xHarbour que fazia exatamente isso, mas deva está no meu NOTE em casa, assim que sobrar um tempinho vou tentar achar !
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
wagner aragao
- Usuário Nível 2

- Mensagens: 58
- Registrado em: 30 Jan 2008 02:06
- Localização: PORTO VELHO-RONDÔNIA
Re: Equivalente a xcopy
Olá,
Uso para copiar varios arquivos de uma pasta para outra o seguinte codigo :
Espero ter ajudado...
t+
Uso para copiar varios arquivos de uma pasta para outra o seguinte codigo :
Código: Selecionar todos
cDirFonte := 'C:\MLINE'
cDirBack := 'C:\Backup'
aArqCli := Array( ADir( Alltrim(cDirFonte) + '\*.???' ) )
aDirCli := ADir( Alltrim(cDirFonte) + '\*.???', aArqCli ) // dados do cliente
*** Faz a copia dos dados do cliente para o diretorio de back-up '*.*' ***
nTOTAL_REC := Len( aArqCli )
nCORRENTE := 0
@ 22, 55 say 'Etapa ' + strzero(++etapa,2) + ' de ' + STRZERO(NUM_ETAPA,2)
*** Realiza backup de todos os arquivos ***
for p := 1 to Len( aArqCli )
nCORRENTE++
cArq1 := alltrim(cDirFonte) + '\' + aArqCli[p]
cArq2 := alltrim(cDirBack) + '\' + aArqCli[p]
@ 13, 01 clear to 21,79
limpa(24)
@ 24, 04 say ' Gerando Back-Up....'
@ 16, 04 say ' Origem : ' + cArq1
@ 17, 04 say 'Destino : ' + cArq2
@ 19, 04 say 'Quantidade de arquivos : ' + strzero(nTOTAL_REC,3)
@ 20, 04 say ' Quantidade copiados : ' + strzero(nCORRENTE,3)
@ 21, 04 say ' Status Operacao : Copiando...'
copy file &cArq1 to &cArq2
next
@ 16, 04 say ' Status Operacao : OK... '
inkey(2)
t+
xHarbour 1.2.3 Simplex / xDev 0.70 / LetoDB 2.15b37 / HWGUI 2.17 / xDesigner (LF Basso)
Re: Equivalente a xcopy
To com o mesmo problema, ao dar RUN em alguma coisa, de dentro do meu programa.
Vou experimentar todas essas dicas
Vou experimentar todas essas dicas
lugab
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
Re: Equivalente a xcopy
Caros colegas.
O que realmente resolveu meu problema foi a funcao do sygecom. Ela funciona perfeitamente, posso envocar qualquer comando do MS-DOS de forma transparente, o usuario nao percebe nada. O unico problema é que ela só funciona em kernel NT. Entao fiz o seguinte:
A funcao winexec pertence a HWGUI, mas o codigo dela pode facilmente ser achado aqui mesmo no forum. O primeiro parametro dela é a linha de comando a ser executada, o segundo parametro e a forma que a janela sera apresentada, neste caso, parametro 2, ira executar minimizado. Desda forma em win98 eu consigo executar comandos do MS-DOS sem aparecer a telinha preta do dos, aparece apenas o nome da janela na barra de tarefas do windows.
O que realmente resolveu meu problema foi a funcao do sygecom. Ela funciona perfeitamente, posso envocar qualquer comando do MS-DOS de forma transparente, o usuario nao percebe nada. O unico problema é que ela só funciona em kernel NT. Entao fiz o seguinte:
Código: Selecionar todos
************************
function myrun(cComando)
************************
local oShell,RET
if os_iswinnt()
oShell := CreateObject( "WScript.Shell" )
RET := oShell:Run( "%comspec% /c " + cComando, 0, .T. )
oShell := NIL
else
winexec(cComando,2)
endif
return
