将文件夹中的每四个文件存档为包含 Windows 批处理文件的 zip 文件



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

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

  • 测试1.dbf
  • Test1.prj
  • 测试1.shp
  • 测试1.shx
  • 测试2.dbf
  • Test2.prj
  • 测试2.shp
  • 测试2.shx

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

  • 测试1.zip:

    • 测试1.dbf
    • Test1.prj
    • 测试1.shp
    • 测试1.shx
  • 测试2.zip:

    • 测试2.dbf
    • Test2.prj
    • 测试2.shp
    • 测试2.shx

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

例如,我得到:

  • 测试1.zip:

    • 测试1.shp
  • 测试2.zip:

    • 测试2.shp

此代码为:

@ECHO ON
SET SourceDir=sourcefolder
SET DestDir=destinationfolder
CD /D "C:Program Files7-Zip"
FOR /F "TOKENS=*" %%F IN ('DIR /B /A-D "%SourceDir%"') DO (
7z.exe a "%DestDir%%%~NF.zip" "%SourceDir%%%~NXF"
)
EXIT

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

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

@ECHO ON
SET SourceDir=SourceFolder
SET DestDir=DestinationFolder
CD /D "C:Program Files7-Zip"
FOR /F "TOKENS=*" %%F IN ('dir /B /A:-D "%SourceDir%*.prj"') DO (
7z.exe a "%DestDir%%%~NF.zip" "%SourceDir%%%~NF.*"
)
EXIT

区别在于 FOR 循环中的 dir-command。

最新更新