首页 > 解决方案 > 如何使用 Windows 批处理脚本迭代和解压缩输入 txt 文件中存在的文件列表

问题描述

我有一个包含文件列表的input.txt 。

其中一些具有.7z扩展名(使用 7zip 压缩),而另一些则没有。

input.txt 的内容:(此列表可以包含 N 行和任意数量的文件扩展名)

mydir/dir1/dir2/dir3/ A.7z
mydir/dir1/dir2/dir3/dir4/Bh
mydir/dir1/dir2/dir4/Ch
mydir/dir1/dir2/ D.7z

注意:

  1. input.txt 中斜线的方向是正确的(即 / )。

  2. 我想遍历 input.txt 并在适用的地方解压缩文件(在这种情况下,解压缩 A.7z 和 D.7z)

我的根目录如下所示:

C:\X\input.txt

C:\X\mybat.bat

C:\X\mydir\dir1\dir2\dir3\dir4\Bh

C:\X\mydir\dir1\dir2\dir3\A.7z

C:\X\mydir\dir1\dir2\dir4\Ch

C:\X\mydir\dir1\dir2\D.7z

我的脚本(mybat.bat)如下所示:

@echo off
set filename=%~1
SETLOCAL ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%a in ('type %filename%') do (
    set z=%%a   
    Set filename2=!z!

    For %%A in ("!filename2!") do (
        Set Folder=%%~dpA
        Set Name=%%~nxA
    )
    echo.Folder is: !Folder!
    echo.Name is: !Name!
    echo.
    echo.
    cd !Folder!
    "C:\Program Files\7-Zip\7z.exe" x !Name!
)

像这样运行脚本:

mybat.bat 输入.txt

问题是:它正确解压缩了第一项(即“mydir/dir1/dir2/dir3/A.7z”),但之后又失败了(即,无法解压缩剩余的列表)。

你能帮忙吗?

我想要的只是能够遍历 input.txt 并解压缩文件(只要适用)。

标签: windowsbatch-file

解决方案


我会这样做:

@echo off
for /F "delims=" %%A in ('findstr /le ".7z" "%~1"') do (
  "C:\Program Files\7-Zip\7z.exe" x -aoa -o"%%~dpA" "%%~nxA"
)

一些解释:

  • 当您可以简单地使用元变量时,创建环境变量是没有意义的for
  • 处理非压缩文件没有意义,所以我只处理.7z文件。
  • 第二个for根本不需要。
  • 无需cd进入目标文件夹;7z可以选择指定目标文件夹。

注意-aoa开关(覆盖模式) - 根据您的要求调整或删除它。


推荐阅读