Certo. Você pode tentar outras abordagens:
1. Usando forfiles:
A ferramenta forfiles é uma opção mais robusta e confiável para lidar com listas de arquivos em scripts batch, especialmente quando você precisa passar a lista para outro comando.
@echo off
cls
echo Compactando arquivos
setlocal EnableDelayedExpansion
set count=0
for %%a in (*.xml) do (
set /a count+=1
)
if !count! EQU 0 (
echo Nenhum arquivo XML encontrado. Compactacao cancelada.
) else (
echo !count! arquivo(s) XML encontrado(s). Compactando...
forfiles /m *.xml /c "cmd /c echo @file" > filelist.txt
tar -cf notasficais.zip -T filelist.txt
if !errorlevel! EQU 0 (
echo Arquivos compactados com sucesso!
) else (
echo Erro ao compactar os arquivos.
)
del filelist.txt
)
endlocal
pause
Explicação:
forfiles /m *.xml /c "cmd /c echo @file" > filelist.txt: Essa linha usa forfiles para iterar sobre todos os arquivos .xml. Para cada arquivo, ela executa cmd /c echo @file que imprime o nome do arquivo no console. A saída de todos esses echo são redirecionadas para o arquivo filelist.txt.tar -cf notasficais.zip -T filelist.txt: Aqui, o tar recebe o argumento -T filelist.txt, o que faz ele ler a lista de arquivos para inclusão no zip do arquivo listado no arquivo filelist.txt.del filelist.txt: Remove o arquivo temporário após o uso.
2. Usando o 7-Zip:
O 7-Zip é uma ferramenta de compactação gratuita e simples para manipular listas de arquivos.
Para usar essa abordagem, você precisaria ter o 7-Zip instalado e o caminho do executável 7z.exe dentro da variável de ambiente PATH ou você pode especificar o caminho completo dele no script.
@echo off
cls
echo Compactando arquivos
setlocal EnableDelayedExpansion
set count=0
for %%a in (*.xml) do (
set /a count+=1
)
if !count! EQU 0 (
echo Nenhum arquivo XML encontrado. Compactacao cancelada.
) else (
echo !count! arquivo(s) XML encontrado(s). Compactando...
"C:\Program Files\7-Zip\7z.exe" a notasficais.zip *.xml
if !errorlevel! EQU 0 (
echo Arquivos compactados com sucesso!
) else (
echo Erro ao compactar os arquivos.
)
)
endlocal
pause
Observações:
- Você precisará adaptar o caminho para o
7z.exe se ele estiver em um diretório diferente. - A opção
"a" no 7z é usada para adicionar arquivos a um arquivo zip.
Espero que isso ajude! Se tiver mais dúvidas, é só perguntar.