如何编写可以将文件解压缩到具有相同名称的新文件夹的批处理文件?

时间:2015-07-15 19:03:41

标签: batch-file

我需要编写一个批处理脚本,允许我将.zip文件解压缩到一个与zip文件同名的新文件夹中。我不能假设我有一些解压缩文件的程序;它必须像计算机是全新的一样工作。

例如,如果我有一组名为a1,b2,c3和d4的zip文件,我希望它们的内容分为4个不同的文件夹,分别标记为a1,b2,c3,d4。它不需要简洁,只需要工作。

1 个答案:

答案 0 :(得分:1)

阅读How can I compress (zip) and uncompress (unzip) files and folders with batch file without using any external tools?撰写的优秀主题npocmaka

我建议使用第二种解决方案:使用Shell.Application

这项任务可以通过zipjs.bat编写npocmaka来完成,批处理文件只需几行:

@echo off
for %%I in (*.zip) do call "%~dp0zipjs.bat" unzip -source "%%~fI" -destination "%%~dpnI\" -force yes
for /F "delims=" %%D in ('dir /AD /B "%TEMP%\*.zip" 2^>nul') do (
    %SystemRoot%\System32\attrib.exe -h "%TEMP%\%%~D"
    rd /S /Q "%TEMP%\%%~D" 2>nul
)

混合批处理文件zipjs.bat必须与上面两行的批处理文件位于同一文件夹中。

在命令提示符窗口call /?中运行说明%~dp0,这意味着批处理文件的参数0的驱动器和路径,而不包含以反斜杠结尾的引号。被调用批处理文件的参数0是批处理文件的名称,另请参阅What does %~dp0 mean, and how does it work?

在命令提示符窗口for /?中运行时显示的 命令帮助解释

  • %%~fI - 没有引号的完整文件/文件夹名称,
  • %%~dpnI - 没有引号且没有扩展名的文件/文件夹的驱动器,路径和名称

用于循环变量,如call /?,用于批处理参数/参数。

第二个 for 循环查找目录中目录名为.zip的临时文件的目录中的所有子目录,删除隐藏属性并删除这些子目录。这是必要的,因为zipjs.bat首先将每个文件提取到临时文件的目录中新创建的子目录中,并在成功提取后将它们留在那里。