使用7zip cmd行批处理时如何排除文件扩展名

时间:2019-01-07 19:32:27

标签: batch-file cmd 7zip

我在Windows的“发送到”文件夹中有一个.batch脚本,该脚本用于将文件夹中的多个文件压缩为.zip。我遇到的问题是,存档文件名中包含扩展名。

我在Google上进行搜索,阅读了很多关于stackexchange的信息,而这些解决方案似乎都不适合我。

@echo off
for %%A in (*.*) do call :doit "%%A"
goto end

:doit
if "%~x1"==".bat" goto :eof
if "%~x1"==".7z" goto :eof
if "%~x1"==".zip" goto :eof
if "%~x1"==".rar" goto :eof
"C:\Program Files\7-Zip\7z.exe" a -tzip %1.zip %1 -sdel
goto :eof

:end

Myfile.txt-> MyFile.txt.zip

如果可能,我想从文件名中删除.txt。

2 个答案:

答案 0 :(得分:1)

您可以使用%~n1,它仅使用第一个参数的文件名。这是一个可能的解决方案:

@echo off
for %%A in (*.*) do (call:doit "%%A")
goto end

:doit
if "%~x1" NEQ ".bat" (
    if "%~x1" NEQ ".7z" (
        if "%~x1" NEQ ".zip" (
            if "%~x1" NEQ ".rar" (
                "C:\Program Files\7-Zip\7z.exe" a -tzip %~n1.zip %~n1 -sdel

:end
exit /b 0

答案 1 :(得分:0)

我不确定您的压缩程序的语法,因为您接受的答案在空间未得到保护和%~n1可能缺少扩展名的情况下看起来都是错误的

您可能可以单行执行此操作:

@For /F "Delims=" %%A In ('Dir /B/A-D-S-L "%~1"^|FindStr /IVE "\.7z \.bat \.rar \.zip"') Do @"%ProgramFiles%\7-Zip\7z.exe" a -tzip "%%~nA.zip" "%%~A" -sdel