我有一个包含几个子文件夹的父文件夹。我正在尝试运行在子文件夹下运行特定操作的bat脚本。但是,我不希望脚本在所有子文件夹中运行。我需要从列表中排除一些。这就是我现在拥有的:
t=[1 2 3 4 5 6 7 8 9 10];
y=[1,-2,2,-1,6,-5,1,-1,8,-5];
pp = interp1(t,y,'spline','pp');
slopes1=ppval(pp_der,t);
在pushd
for /D %%i in (<<path To Parent>>\*) do call :$myFunc "%%i"
popd
exit /B
:$myFunc
for %%g in ("Child2"
"Child3") do ( if /I "%1"=="%%~g" goto match )
echo current directory: %1
exit /B
:$match
echo matched directory
exit /B
子例程中,我可以执行:$myFunc
进入该子目录并运行命令,然后执行cd %1
返回到父文件夹。我之前尝试做的一件事是,如果传入文件夹在我的排除列表中,则排除cd
操作。
文件夹树:
:$myFunc
鉴于上面的示例文件夹结构,当for选择ParentFolder
Child1
Child2
Child3
Child4
和myFunc
时,如何不调用Child2
。
关于如何实现此目标的任何建议?
答案 0 :(得分:2)
这肯定是可能的,并且可以通过以下代码(很多更改)来完成:
@echo off
setlocal EnableDelayedExpansion
rem Set which folders to exclude. This is changeable and NOT HARDCODED:
set exclude_folders="Child2" "Child3"
for /F %%A IN ('dir /B /AD "<path to parent>"') do (
if "!exclude_folders:%%~nxA=!" == "%exclude_folders%" (call :$myFunc "%%A" "%%~fA")
)
exit /b %errorlevel%
:$myFunc
pushd "%~2"
rem Do your commands here; don't use pushd again!
popd
请注意,如果第一个参数位于%cd%
中,则为文件夹名称。否则,这是完整的路径。第二个参数是可选的,更笼统,但是我确定您会需要它!
我将代码更改如下:
exclude_folders
的变量,以在此处列出要执行的文件夹。for /F
循环来循环命令,(dir /B /AD
)循环了所有文件夹,避免隐藏文件夹!%%~nxA
和变量中排除了由于文件夹可能包含点(%%~nxA
而使用的文件夹名(.
)[使用exclude_folders
更改(换句话说,如果foldername
中存在字符串exclude_folders
,则表示该文件夹已被列入黑名单,并且for
循环将从下一行开始,因为没有else
的命令。如果情况相反,则call
子例程$myFunc
带有两个参数:%%A
和%%~fA
%~2
文件夹中执行一些命令,然后返回到循环。exit
。