我正在尝试压缩多个文件,但不断出现这个问题,我的代码显然无法解决这个问题。代码如下:
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"
进一步阅读
- Windows CMD 命令行的 AZ 索引
- Windows CMD 命令的分类列表
- 参数- 命令行参数(或参数)是传递到批处理脚本的任何值。
答案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 扩展为文件名