windows - 如何使用 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
注意:
input.txt 中斜线的方向是正确的(即 / )。
我想遍历 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 并解压缩文件(只要适用)。
解决方案
我会这样做:
@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
开关(覆盖模式) - 根据您的要求调整或删除它。
推荐阅读
- acumatica - 是否有一个 Acumatica REST API 端点可以用来测试是否有连接
- angularjs - 动态创建 ng-model 值
- python - JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
- postgresql - 如何在使用 Jenkins 将 Postgresql 映像部署到 openshift 后执行数据库脚本?
- mysql - 查询超过 1800 万行的 mysql 数据库的替代解决方案
- css - 是否可以通过编辑 CSS 文件在 Bootstrap 4 中设置自定义断点?
- windows - Windows 上文件映射重叠视图的物理 RAM 消耗
- razor - Insight into inheriting from a base controller class
- html - 遇到麻烦
在 CSS 中 - javascript - URL 编码正在破坏 ExtJS 中的路由