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.