1

私は現在、ディレクトリの最初のディレクトリ「レイヤー」ごとに操作を実行する必要があるという問題に直面しています。

私は何千ものサブディレクトリを含むフォルダを持っています。/rを使用してforループを作成しますが、問題は、それらのサブディレクトリにさらに多くのサブディレクトリが含まれているため、それらには入りたくないということです。視覚化の場合:

Root Dir
----Sub-Dir 1
--------Sub-Dir 1 of Sub-Dir 1
--------Sub-Dir 2 of Sub-Dir 1
----Sub-Dir 2
--------Sub-Dir 1 of Sub-Dir 2
--------Sub-Dir 2 of Sub-Dir 2
----Sub-Dir 3
--------Sub-Dir 1 of Sub-Dir 3
--------Sub-Dir 2 of Sub-Dir 3

そして、私は最初の「レイヤー」サブディレクトリ1、2、3などにのみ入りたいので、それぞれのサブサブディレクトリには触れません。

4

1 に答える 1

3

必要なのは、ネストされたFOR / Dステートメント(合計2つ)です。

@echo off
pushd "rootDir"
call :doCommands
for /d %%F in (*) do (
  pushd "%%F"
  call :doCommands
  for /d %%F in (*) do (
    pushd "%%F"
    call :doCommands
    popd
  )
  popd
)
popd
exit /b

:doCommands
echo processing "%cd%"
exit /b

編集

これは、ルートフォルダをarg1(%1)として指定し、さらにいくつのレベルをarg2(%2)として指定できるようにする一般的なソリューションです。

@echo off
set currentLevel=0
set maxLevel=%2
if not defined maxLevel set maxLevel=0

:procFolder
pushd %1
echo processing "%cd%"
if %currentLevel% lss %maxLevel% (
  for /d %%F in (*) do (
    set /a currentLevel+=1
    call :procFolder "%%F"
    set /a currentLevel-=1
  )
)
popd
于 2012-09-09T21:12:00.917 に答える