使用FOR或FORFILES批处理命令单独归档特定文件

时间:2014-10-29 14:53:26

标签: windows batch-file cmd 7zip

我在不同的目录和子目录中有一组.iso文件:

 <folder1>
    app1.iso
    app2.iso
    app3.iso
    <subfolder1>
        app1a.iso
        app2a.iso
    <subfolder2>
        app2b.iso
        app3b.iso
<folder2>
    app4.iso
    app5.iso
    <subfolder5>
        app20.iso

使用批处理文件并预先安装了7-zip(配置了PATH环境变量),我希望能够将每个.iso存档到它自己的.7z存档文件中。我不想将当前文件夹中的所有.iso存档到一个存档中。

我尝试与FORFILES一起创建我自己的7-zip命令:

FORFILES /P . /M *.iso /S /C "cmd /c 7z a -t7z @path.7z -mx9 -mmt >> C:\test\7z-log.txt"

然而,这样做的是:

app1.iso.7z - contains: app1.iso, app2.iso, app3.iso
app2.iso.7z - contains: app1.iso.7z, app1.iso, app2.iso, app3.iso
app3.iso.7z - contains: app1.iso.7z, app2.iso.7z, app1.iso, app2.iso, app3.iso
app1a.iso.7z - contains: app1a.iso, app2a.iso
app2a.iso.7z - contains: app1a.iso.7z, app1a.iso, app2a.iso

...

我想要的是(每个都在相关的文件夹或子文件夹中):

app1.iso.7z - contains: app1.iso
app2.iso.7z - contains: app2.iso
app3.iso.7z - contains: app3.iso
app1a.iso.7z - contains: app1a.iso
...

任何人都可以帮我处理批处理命令吗?

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR /f "delims=" %%a IN (
  'dir /s/b /a-d "%sourcedir%\*.iso" '
  ) DO (
  ECHO(7z a -t7z "%%~fa.7z" "%%~fa" -mx9 -mmt 
)
GOTO :EOF

您需要更改sourcedir的设置以适合您的具体情况。

为了测试目的,所需的7z命令仅为ECHO在您确认命令正确后,将ECHO(7z更改为7z以实际归档文件。

请注意,缺少重定向到日志。这样做是为了允许将建议的操作显示在屏幕上。