我有以下结构:
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
FOR /R - Loop through files (recursively) FOR /D - Loop through several folders/directories
The option /D /r is undocumented, but can be a useful combination, while it will recurse through all subfolders the wildcard will only match against Folder/Directory names (not filenames) Note: Source linked to ss64.com
观察:如果您的命令需要使用循环文件夹 ( "%%~fi"
) 中的某些“依赖”文件,则pushd
, command
&popd
将帮助您在每个文件夹中正确执行命令