如何压缩多个文件而不包含原始文件扩展名?

如何压缩多个文件而不包含原始文件扩展名?

我正在尝试压缩多个文件,但不断出现这个问题,我的代码显然无法解决这个问题。代码如下:

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

我正在尝试对一个目录中的多个文件进行 7z 压缩,但我一直得到像“Foobar.txt.7z”这样的文件格式,但我希望它是“Foobar.7z”,我有数千个文件,我知道这是一个简单的修复,我只是不知道如何做。

答案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"

进一步阅读

答案2

您在命令中指定了带有 .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 扩展为文件名

相关内容