如何对每个子文件夹执行命令?

如何对每个子文件夹执行命令?

我有以下结构:

parent_folder
     |______subfolder1
     |           |________sub_subfolder_1
     |           |________sub_subfolder_2
     |           |________sub_subfolder_3
     |          
     |______subfolder2
                 |________sub_subfolder_4
                 |________sub_subfolder_5
                 |________sub_subfolder_6

我需要能够在每个 上执行某些sub_subfolder_x命令

就我的示例而言,我只是尝试回显文件夹名称。

这是我尝试过的但是没有用:

for /d %%x in (*) do (
cd %%x
for /d %%y in (*/%%x) do (
echo %%y
)
)

当我简单地做

for /d %%x in (*) do (
echo %%x
)

它可以工作并列出 下的所有文件夹parent_folder。但我尝试 cd 到 的脚本(*/%%x)不起作用

答案1

您的主要问题是*/%%x。 应该是%%x\*。 您不需要cd进入该文件夹(如果需要,最好使用pushd,这样您就可以轻松地用 恢复它popd

@echo off
for /d %%x in (*) do (
  for /d %%y in ("%%x\*") do (
    echo %%y
  )
)

答案2

我找到了一种对我有用的方法:

@echo off

cd /d "%~dp0\parent_folder"

for /d %%x in (*) do (
     cd /d "%cd%\%%~x"
     for /d %%y in (*) do (    
         echo current sub folder is %%y
        )
    )
pause 

我只是反复试验,直到成功。我想知道它是否因为某种原因而存在问题,并且在某些情况下无法工作?

答案3

您可以使用带有一些开关的 dir 来检索子文件夹的名称并将它们存储在数组中(这有点技巧,因为批处理实际上不支持数组)。

之后,您可以循环遍历该数组。然后,您将目录更改为数组中的每个文件夹,并在每个子文件夹中执行要执行的代码段。

以下是一个例子:

@echo off
setlocal enableDelayedExpansion

REM Retrieve Parent Folder
set parentfolder=%cd%

REM Retrieve Subfolders
set i=0
for /f "eol=: delims=" %%F in ('dir /b /ad *') do (
  set /a i+=1
  set "folder!i!=%%F"
)

REM Loop Through Sub Folders
for /l %%N in (1 1 %i%) do (
cd %parentfolder%\!folder%%N!
echo do something
)

答案4

@echo off && cd /d "%~dp0"

for /r /d %%i in (.) do pushd "%%~fi" && =;(
    %ComSpec% /v /r "echo\"!cd!"" & popd );=

尝试使用for /R /D在所有子目录中的一个循环递归,并在每个文件夹中运行命令:

 for /r /d %%i in (.) do pushd "%%~fi" && %ComSpec% /v /r "[Your Command Here]" & popd

观察:如果您的命令需要使用循环文件夹 ( "%%~fi") 中的某些“依赖”文件,则pushd, command&popd将帮助您在每个文件夹中正确执行命令

相关内容