如何在Windows中的子目录中循环,并使用Windows批处理脚本重复命令

时间:2017-06-03 11:13:53

标签: windows batch-file

我在Windows 10.我有一个包含子文件夹的文件夹。所有子文件夹中都包含“Subs”文件夹。我想循环遍历所有子目录,转到子目录,unrar文件,转到下一个子目录并重复。

我尝试了下面的脚本,但无法开始工作。

@echo off
setlocal enableextensions enabledelayedexpansion

set "rootFolder=C:\Users\MNM\MAT"

 echo ----------------------------------------------------------------------
for /d /r "%rootFolder%" %%a in (.) do (
    set mypath=%cd%
    @echo %mypath%
    cd %%a
    set mypath=%cd%
    @echo %mypath%
    cd Subs
    set mypath=%cd%
    @echo %mypath%
    C:\Users\MNM\MAT\unrar e *subs.rar C:\Users\MNM\mat2\
    cd C:\Users\MNM\MAT
)

3 个答案:

答案 0 :(得分:2)

这个简单的任务只需一个命令行即可完成:

@echo off
for /R "%USERPROFILE%\MAT" %%I in ("*subs.rar") do "%USERPROFILE%\MAT\UnRAR.exe" x -c- -idcdp -y "%%I" "%USERPROFILE%\mat2\"

USERPROFILE 是预定义的Windows Environment Variable,位于您的计算机上,用于您定义的值为C:\Users\MNM的用户帐户。

命令 FOR 在目录C:\Users\MNM\MAT及其所有非隐藏子目录中搜索/R,因为非隐藏文件与模式*subs.rar匹配。找到的每个文件名都分配有循环变量I的完整路径。

为每个找到的RAR存档文件执行

UnRAR ,以便将存档解压缩到目录C:\Users\MNM\mat2,同时提取RAR存档文件中的目录结构,因为命令x代替e。由于-y,目标目录(树)中的现有文件将被自动覆盖。开关-c--idcdp用于在提取过程中显示较少的信息。

有关 UnRAR 的已使用和其他可用开关的简要说明,请在命令提示符窗口 UnRAR 中运行,不带任何参数或使用/?作为参数。如果还安装了共享软件应用程序,则可以在 WinRAR 的程序文件文件夹中的文本文件Rar.txt中找到 UnRAR 的命令和开关的完整说明只是免费软件 UnRAR

在将所有RAR存档提取到相同的目标目录中时,绝对不需要更改到包含RAR存档文件的目录。

答案 1 :(得分:0)

如果我正确理解了您的文件夹结构,这是一种可行的方法:

@echo off
set "Base=C:\Users\MNM\MAT"
echo ----------------------------------------------------------------------
for /F "delims=" %%A in (
  'dir /B/S "%Base%\*subs.rar" ^| findstr /i "^%Base:\=\\%\\[^\\]*\\Subs\\[^\\]*subs.rar$"'
) do Echo "C:\Users\MNM\MAT\unrar.exe" e "%%~fA" "C:\Users\MNM\mat2\"
  • for /f将解析dir和findstr
  • 的输出
  • dir将从*subs.rar
  • 开始迭代树中的所有%Base%
  • findstr中的复杂RegEx会将rar过滤为%Base%
  • 子文件夹中子文件夹中的rar
  • 作为反斜杠是RegEx中的转义字符,文字反斜杠必须加倍。

如果输出看起来没问题,请删除最后一行的回声。

答案 2 :(得分:0)

仅仅因为递归所有子目录并提取所有*subs.rar文件并未在此处请求,这是基于我的假设的示例:

@ECHO OFF
SET "rootDir=%USERPROFILE%\MAT"
IF /I NOT "%CD%"=="%rootDir%" CD /D "%rootDir%"
FOR /D %%A IN (*
) DO IF EXIST "%%A\Subs\*subs.rar" UNRAR e "%%A\Subs\*subs.rar" mat2\