以下代码非常适合提取当前目录及其子目录中的任何 zip 类型文件。它将创建一个与 zip 文件同名的目录,并将内容提取到该目录中。这很好,但是如果您在同一个目录中有 test.zip 和 test.rar,如果您不希望 rar 和 zip 的内容输出到同一个“test”目录,那么就会出现问题。我希望它提取到带有 zip 名称(包括扩展名)的目录中。换句话说,将 test.zip 提取到名为“test.zip”的文件夹中,将 test.zip 提取到名为“test.rar”的文件夹中——以避免文件名冲突。
for /F "DELIMS=" %%I IN ('dir /b /s *.zip *.rar *.7z') DO ( "C:\Program Files\7-Zip\7z.exe" x -aos -o"%%~dpnI" "%%I" )
我以为只需将 -o"%%~dpnI" 改为 -o"%%~dpnxI" 即可,但似乎行不通。请帮忙!
答案1
我发现,即使一个是文件,一个是文件夹,同一个目录中也不能有同名同扩展名的文件夹和文件。我的解决方案是将 test.zip 提取到 test_.zip 文件夹(在扩展名前面使用下划线,这样它们就不会有相同的名称)。
@echo off
:: Put name of folder of extraction here:
set Folder=%userprofile%\desktop\Test
:: Put location of 7z.exe here:
set Seven=C:\Program Files\7-Zip\7z.exe
pushd "%Folder%"
for /F "DELIMS=" %%I IN ('dir /b /a-d /s *.zip *.rar *.7z') DO ("%Seven%" x -aos -o"%%~dpnI_%%~xI" "%%I")
popd