长话短说,我在网络共享上有一个文件夹,里面有 200 多个其他文件夹,其中一些文件夹包含 .rar 文件。我想就地提取所有 .rar 文件。而不是提取到另一个目录。例如,我在共享 z:\Foo 中有 200 多个文件夹。为简单起见,目录名称为 1-200。文件夹 2、5 和 20 中有 .rar 文件。(实际上有 100 多个 .rar 文件)我想从“z:\Foo”运行一个命令,该命令将查看 foo 内的所有文件夹并提取找到的文件夹中的 .rar 文件,即 2、5 和 20。
我尝试导航到“z:\Foo”并运行命令
FOR /F "usebackq" %a in (`DIR /s /b *.rar`) do 7z.exe e %a"
效果很好,但会将所有文件提取到“z:\Foo”我曾考虑使用 cmd 提示符运行命令来搜索 .rar 文件并从该目录中执行该命令,但没有成功。类似于
find . -type f -name *.rar -execdir FOR /F "usebackq" %a in (`DIR /s /b *.rar`) do 7z.exe e %a *.rar ';'
但那是从另一个论坛快速复制粘贴的,我没有时间或脑力去诊断它,我也没有运气修改代码以尝试将其提取到它找到 .rar 文件的目录中。我也尝试了其他几个程序,但似乎都不能正常工作。我对其他选择持开放态度,但为了简单起见,我真的只是想让这个代码正常工作。理想情况下,我只需要每隔一段时间运行一次这段代码。附注,我不介意它是否会覆盖已经解压的文件,但希望它跳过已经解压的文件,并且我不希望它之后删除 .rar 文件。谢谢你的时间!还有一件事,我这样做是因为它通常 90% 是 .rar 文件,但有时是 .7zip 文件。想保留 7zip 作为程序,这样我就可以更改代码以处理不同的 zip 类型。
答案1
您可以执行以下操作
for /f %i in ('dir /b /s *.rar') do pushd "%~dpi" & 7z x "%i" & popd
使用pushd
更改目录,%~dpi
从变量中提取目录i
,然后使用popd
返回。