Как исключить расширение файла при использовании командной строки 7zip cmd - PullRequest
0 голосов
/ 07 января 2019

У меня есть скрипт .batch в папке «Отправить в» в Windows, который я использую для сжатия нескольких файлов в папке в .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 голосов
/ 08 января 2019

Я не уверен в синтаксисе вашей программы сжатия, , потому что принятый вами ответ выглядит неверно как в том факте, что пространства не защищены, так и в %~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
0 голосов
/ 07 января 2019

Вы можете использовать %~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
...