2

Я пытаюсь сжать несколько файлов, но продолжаю сталкиваться с этой проблемой, для которой мой код, очевидно, не работает. Вот код:

for /r %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%X.7z" "%%X"

Я пытаюсь создать 7z несколько файлов в каталоге, но я продолжаю получать файлы в формате, подобном «Foobar.txt.7z», но вместо этого я хотел бы, чтобы он был «Foobar.7z», у меня есть тысячи файлов, и я знаю это было бы легко исправить, я просто не знаю как.

2 ответа2

1

В вашей команде вы указываете полное имя файла с расширением .7z. Давайте прекратим делать это:

for /r %X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%~nX" "%X"

ОБЪЯСНЕНИЕ: вы используете переменные DOS. % X - это переменная. Существуют варианты в DOS для управления переменными. «~ N» выражает имя файла из переменной без расширения.

ОТ: https://www.computerhope.com/forhlp.htm

% ~ nI расширяет% I только на имя файла

1

Я продолжаю получать свои файлы в формате, подобном «Foobar.txt.7z»

for /r %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%X.7z" "%%X"

Вам нужно удалить расширение из %%X Вы можете сделать это используя выражение %%~nX:

for /r %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%~nX.7z" "%%X"

Однако, если вы сделаете это, у вас могут возникнуть проблемы, если существует несколько файлов с одинаковыми именами, но с разными расширениями. Например, в моем тестовом каталоге у меня есть файлы со следующими именами:

> dir /b test.*
test.cmd
test.ps1
test.sh
test.txt

Используя следующее в командном файле:

for /r %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%~nX.7z" "%%X"

Будет производить следующее для вышеуказанных файлов:

"c:\Program Files\7-Zip\7z.exe" a "test.7z" "F:\test\test.cmd"
"c:\Program Files\7-Zip\7z.exe" a "test.7z" "F:\test\test.ps1"
"c:\Program Files\7-Zip\7z.exe" a "test.7z" "F:\test\test.sh"
"c:\Program Files\7-Zip\7z.exe" a "test.7z" "F:\test\test.txt"

Вам нужно будет найти способ справиться с любыми такими дублирующимися именами архивов, если только вы не хотите добавлять несколько файлов в один архив.

Из командной строки вы можете заменить %% на % следующим образом:

for /r %X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%~nX.7z" "%X"

Дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .