Página 1 de 1
Equivalente a xcopy
Enviado: 23 Out 2009 15:02
por TerraSoftware
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!
Re: Equivalente a xcopy
Enviado: 25 Out 2009 15:34
por alxsts
Olá!
TerraSoftware escreveu:eu nao gosto de chamar comandos MS-DOS devido a tela preta que aparece.
Não conheço comando ou função próprios para executar esta tarefa.
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.
Re: Equivalente a xcopy
Enviado: 26 Out 2009 09:24
por TerraSoftware
Muito bom colega, obrigado, funcionou em windows com kernel NT, em win98 nao deu certo, pois nele nao existe o cmd.exe, alguma sugestao?
Re: Equivalente a xcopy
Enviado: 26 Out 2009 14:26
por alxsts
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...
Re: Equivalente a xcopy
Enviado: 02 Nov 2009 18:10
por sygecom
Pode tentar usar o MYRUN() para chamar essa sua rotina sem mostrar nada na tela:
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. )
Re: Equivalente a xcopy
Enviado: 02 Nov 2009 18:34
por Maligno
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.
Re: Equivalente a xcopy
Enviado: 04 Nov 2009 12:53
por sygecom
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 !
Re: Equivalente a xcopy
Enviado: 18 Nov 2009 14:45
por wagner aragao
Olá,
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)
Espero ter ajudado...
t+
Re: Equivalente a xcopy
Enviado: 23 Nov 2009 18:12
por lugab
To com o mesmo problema, ao dar RUN em alguma coisa, de dentro do meu programa.
Vou experimentar todas essas dicas
Re: Equivalente a xcopy
Enviado: 24 Nov 2009 08:28
por TerraSoftware
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:
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
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.