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

如何在windows中的子目录内循环,并使用windows批处理脚本重复该命令,windows,batch-file,Windows,Batch File,我在Windows10上。我有一个带子文件夹的文件夹。所有子文件夹中都有“Subs”文件夹。我想遍历所有的子目录,转到Subs目录,取消一个文件,转到下一个子目录,然后重复 我试着写下剧本,但没能开始工作 @echo off setlocal enableextensions enabledelayedexpansion set "rootFolder=C:\Users\MNM\MAT" echo ----------------------------------------------

我在Windows10上。我有一个带子文件夹的文件夹。所有子文件夹中都有“Subs”文件夹。我想遍历所有的子目录,转到Subs目录,取消一个文件,转到下一个子目录,然后重复

我试着写下剧本,但没能开始工作

@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
)

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

@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\"

  • /f的
    将解析dir和findstr的输出
  • dir将迭代树中从
    %Base%
    开始的所有
    *subs.rar
  • findstr中的复杂正则表达式将把rar过滤到
    %Base%
  • 由于反斜杠是正则表达式中的转义字符,因此文字反斜杠必须加倍

如果输出看起来正常,请删除最后一行中的回显。

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

@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\"

  • /f的
    将解析dir和findstr的输出
  • dir将迭代树中从
    %Base%
    开始的所有
    *subs.rar
  • findstr中的复杂正则表达式将把rar过滤到
    %Base%
  • 由于反斜杠是正则表达式中的转义字符,因此文字反斜杠必须加倍

如果输出看起来正常,请删除最后一行中的回显。

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

@echo off
for /R "%USERPROFILE%\MAT" %%I in ("*subs.rar") do "%USERPROFILE%\MAT\UnRAR.exe" x -c- -idcdp -y "%%I" "%USERPROFILE%\mat2\"
USERPROFILE是一个预定义的用户配置文件,在您的计算机上为您的用户帐户定义了
C:\Users\MNM

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

对找到的每个RAR归档文件执行UNRR,以将归档文件提取到目录
C:\Users\MNM\mat2
,同时提取RAR归档文件中的目录结构,因为命令
x
而不是
e
。由于
-y
,将自动覆盖目标目录(树)中的现有文件。开关
-c-
-idcdp
用于在提取过程中显示较少的信息

有关UNRR的已用开关和其他可用开关的简要说明,请在命令提示窗口中运行UNRR,不带任何参数或以
/?
作为参数。UNRR命令和开关的完整说明可在WinRAR的program files文件夹中的文本文件
Rar.txt
中找到,前提是该共享软件应用程序也已安装,而不仅仅是免费的UNRR


将所有RAR归档文件提取到同一目标目录(如图所示)时,绝对不需要切换到包含RAR归档文件的目录。

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

@echo off
for /R "%USERPROFILE%\MAT" %%I in ("*subs.rar") do "%USERPROFILE%\MAT\UnRAR.exe" x -c- -idcdp -y "%%I" "%USERPROFILE%\mat2\"
USERPROFILE是一个预定义的用户配置文件,在您的计算机上为您的用户帐户定义了
C:\Users\MNM

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

对找到的每个RAR归档文件执行UNRR,以将归档文件提取到目录
C:\Users\MNM\mat2
,同时提取RAR归档文件中的目录结构,因为命令
x
而不是
e
。由于
-y
,将自动覆盖目标目录(树)中的现有文件。开关
-c-
-idcdp
用于在提取过程中显示较少的信息

有关UNRR的已用开关和其他可用开关的简要说明,请在命令提示窗口中运行UNRR,不带任何参数或以
/?
作为参数。UNRR命令和开关的完整说明可在WinRAR的program files文件夹中的文本文件
Rar.txt
中找到,前提是该共享软件应用程序也已安装,而不仅仅是免费的UNRR


将所有RAR归档文件提取到此处所示的同一目标目录中时,绝对不需要切换到包含RAR归档文件的目录。

只是因为没有请求递归所有子目录并提取所有
*subs.RAR
文件。以下是一个基于我假设的示例:

@ECHO关闭
设置“rootDir=%USERPROFILE%\MAT”
如果/I不是“%CD%”==“rootDir%”CD/D“%rootDir%”
对于/D%%A,在(*
)如果存在“%%A\Subs\*Subs.rar”UNRAR e“%%A\Subs\*Subs.rar”mat2,则执行此操作\

只是因为没有请求递归所有子目录和提取所有
*subs.rar
文件这里有一个基于我假设的示例:

@ECHO关闭
设置“rootDir=%USERPROFILE%\MAT”
如果/I不是“%CD%”==“rootDir%”CD/D“%rootDir%”
对于/D%%A,在(*
)如果存在“%%A\Subs\*Subs.rar”UNRAR e“%%A\Subs\*Subs.rar”mat2,则执行此操作\

请提供一个目录结构示例,显示
.rar
文件的位置以及要提取它们的位置。问题是……您应该阅读和,并且请提供目录结构的示例,显示
.rar
文件的位置以及您要提取它们的位置。这个问题…你应该阅读,以及