Eu continuo recebendo meus arquivos em um formato como "Foobar.txt.7z"
for /r %%X in (*) do "c:\Program Files-Zipz.exe" a "%%X.7z" "%%X"
Você precisa remover a extensão de %%X
. Você pode fazer isso usando a expressão %%~nX
:
for /r %%X in (*) do "c:\Program Files-Zipz.exe" a "%%~nX.7z" "%%X"
No entanto, se você fizer isso, poderá ter um problema se houver vários arquivos com o mesmo nome, mas extensões diferentes. Por exemplo, no meu diretório de teste, eu tenho arquivos com os seguintes nomes:
> dir /b test.*
test.cmd
test.ps1
test.sh
test.txt
Usando o seguinte em um arquivo em lotes:
for /r %%X in (*) do "c:\Program Files-Zipz.exe" a "%%~nX.7z" "%%X"
Produzirá o seguinte para os arquivos acima:
"c:\Program Files-Zipz.exe" a "test.7z" "F:\test\test.cmd"
"c:\Program Files-Zipz.exe" a "test.7z" "F:\test\test.ps1"
"c:\Program Files-Zipz.exe" a "test.7z" "F:\test\test.sh"
"c:\Program Files-Zipz.exe" a "test.7z" "F:\test\test.txt"
Você precisará descobrir uma maneira de lidar com esses nomes de arquivos duplicados, a menos que adicionar vários arquivos ao mesmo arquivo seja sua intenção.
Na linha de comando, você pode substituir %%
por %
, da seguinte maneira:
for /r %X in (*) do "c:\Program Files-Zipz.exe" a "%~nX.7z" "%X"
Leitura Adicional
- Um índice A-Z da linha de comando do Windows CMD
- Uma lista categorizada de comandos do Windows CMD
- parâmetros - Um argumento de linha de comando (ou parâmetro) é qualquer valor passado para um script em lote.