使用Windows批处理文件将文件夹中的每四个文件存档到一个zip文件

时间:2018-04-05 10:01:10

标签: file batch-file for-loop zip shape

我有一个Esri Shapes的文件夹。每个Shape由4个单独的文件(.dbf,.prj,.shp,.shx)组成。我希望每个形状都存档在一个单独的.zip文件中。另外,我希望这个.zip文件与它包含的形状具有相同的名称。

例如,如果我有以下文件:

  • Test1.dbf
  • Test1.prj
  • Test1.shp
  • Test1.shx
  • Test2.dbf
  • Test2.prj
  • Test2.shp
  • Test2.shx

然后我希望这些文件存档如下:

  • Test1.zip:

    • Test1.dbf
    • Test1.prj
    • Test1.shp
    • Test1.shx
  • Test2.zip:

    • Test2.dbf
    • Test2.prj
    • Test2.shp
    • Test2.shx

所以我认为这可以通过批处理文件和FOR循环来完成。但是,我不太了解编写批处理文件所需的代码语言。我在Stackoverflow上的其他地方找到了一些代码,但它只返回生成的.zip文件中的.shp文件。

例如我得到:

  • Test1.zip:

    • Test1.shp
  • Test2.zip:

    • Test2.shp

此代码为:

@ECHO ON

SET SourceDir=sourcefolder
SET DestDir=destinationfolder

CD /D "C:\Program Files\7-Zip"
FOR /F "TOKENS=*" %%F IN ('DIR /B /A-D "%SourceDir%"') DO (
7z.exe a "%DestDir%\%%~NF.zip" "%SourceDir%\%%~NXF"
)
EXIT

有人可以告诉我如何调整这个以便在单个.zip文件中获得每个形状的所有4个组件吗?

1 个答案:

答案 0 :(得分:1)

正如Stephan和aschipfl评论的那样,代码应如下所示:

@ECHO ON

SET SourceDir=SourceFolder
SET DestDir=DestinationFolder

CD /D "C:\Program Files\7-Zip"
FOR /F "TOKENS=*" %%F IN ('dir /B /A:-D "%SourceDir%\*.prj"') DO (
    7z.exe a "%DestDir%\%%~NF.zip" "%SourceDir%\%%~NF.*"
)
EXIT

差异在FOR-loop中的dir-command中找到。