Notifications
Clear all

Comando Shell

7 Posts
2 Usuários
0 Reactions
2,966 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Estou estando executar um arquivo .bat que zipa todas as pastas de dentro do diretório onde ele está.

Quando eu executo o arquivo na mão, funciona perfeito. Porém quando eu executo via SHELL ele começa a zipar um monte de coisa do meu computador, e não da pasta onde ele está, como se pegasse todas as pasta do PC e começasse a zipar ( Dor de cabeça fazer isso para..rsrs)

O bat:

for /d %%X in (*) do "C:Program Files7-Zip7zG.exe" a "%%X.zip" "%%X"

FOR %%i IN (*.ppt) DO "C:Program Files7-Zip7zG.exe" a -tzip "%%i.zip" "%%i"

O VBA:

Sub executeBat()
Dim MyPath As String
MyPath = "C:TesteHARDBAT.bat"
Shell (MyPath)
End Sub

Dentro da pasta TESTE, tenho mais 2 pasta que teriam que zipar após a execução do .bat

Tem outra forma de executar dora o shell?

 
Postado : 17/12/2012 7:44 am
(@hronconi)
Posts: 314
Reputable Member
 

No VBA não existe erro algum, o seu problema é que no seu shell você não especificou de qual diretório quer zipar os arquivos e por padrão vai pegar do diretório corrente da chamada shell.

Mude a posição de onde está o shell no seu bat com o camando CD ...

Abraço,

Henrique Ronconi

 
Postado : 17/12/2012 7:49 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

hronconi,
Como fazer isso? nâo tenho conhecimento em bat, adaptei esse código de linhas que achei na internet.

 
Postado : 17/12/2012 7:56 am
(@hronconi)
Posts: 314
Reputable Member
 

Edite o seu arquivo .BAT e introduza o comando CD.

CD C:UserskidsgostoDocuments
for /d %%X in (*) do "C:Program Files7-Zip7zG.exe" a "%%X.zip" "%%X"

FOR %%i IN (*.ppt) DO "C:Program Files7-Zip7zG.exe" a -tzip "%%i.zip" "%%i"

Onde C:UserskidsgostoDocuments você vai trocar para o diretório onde quer fazer a compactação.

 
Postado : 17/12/2012 8:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Resolveu porém surgiu outro problema.
Esse caminho do CD tem que ser variável.. meu algoritmo é assim.

Entro na pasta que preciso compactar meus arquivos.
Copio o .bat de uma pasta auxiliar e colo dentro na minha pasta ativa.
Executo o bat. ( isso bai zipar meus arquivos)
Dou um Kill no .bat.

Isso será executado em 150 pastas, ou sejam CD tem que ser variável. Uma alternativa seria criar o .bar de dentro do VBA e não usar um copy.
Vou tentar

Obrigado.

 
Postado : 17/12/2012 8:53 am
(@hronconi)
Posts: 314
Reputable Member
 

No seu caso é melhor gerar o BAT via VBA sim.

Sds,

Henrique Ronconi

 
Postado : 17/12/2012 9:43 am
(@hronconi)
Posts: 314
Reputable Member
 

Ou então você pode passar via parâmetro do bat.
Supondo que seu arquivo BAT se chame COMPACTA.BAT
No shell você pode fazer a chamada
Exemplo: compacta c:MeusDocumentospasta1
no BAT o valor de $1 vai ser C:MeusDocumentosPasta1
Então é só substituir no bat para
CD $1

Abraço,

Henrique Ronconi

 
Postado : 17/12/2012 9:46 am