for循环嵌套的两种用法

主要有两种类型的for循环嵌套,下面来介绍这两种类型循环嵌套的用法以及事例。

一:内外循环独立进行

#include<stdio.h>
void main()
	{
		
		int i,j;
		char a[5]="$$$$$";
		for(i=0;i<5;i++)
		{
			for(j=0;j<5;j++)
			printf("%c",a[j]);
			printf("\n");
		}
			
	}

二:内部循环依赖于外部循环

#include<stdio.h>
void main()
	{
		
		int i,j;
		char a[5]="$$$$$";
		for(i=0;i<5;i++)
		{
			for(j=0;j<=i;j++)
			printf("%c",a[j]);
			printf("\n");
		}
			
	}

        第一种方式中,内部循环进行5次,外部循环也进行5次,相当于外部循环把内部循环的结果打印了5次,为什么呢?因为内部循环的条件是固定的(j<5),每次外部循环,内部循环都要进行5次,效果大家可想而知。第二种方式中,当外部循环进行第一次时,即i=0时,由于内部循环的条件为j<=i,此时0<=0,满足循环条件,在这种方式中,内部循环的条件每次都是变化的。因此,当外部循环进行一次时,内部循环进行打印出数组a[5]中的第一个元素a[1],即打印出一个$。以此类推打印出了a[5]中的所有元素。

       以下是两种方式打印的结果:

👏欢迎大家访问我的github:JustinLeei (JustinLee) · GitHub

### 实现 Batch 脚本中的 For 循环嵌套 在 Batch 脚本中,For 循环是一种强大的工具,可用于遍历文件、目录或其他数据集合。当需要更复杂的逻辑时,可以将一个 For 循环嵌套在另一个 For 循环内部。以下是关于如何正确实现这种结构以及解决路径相关问题的具体方法。 --- ### 嵌套 For 循环的语法与示例 Batch 中的 For 循环支持多种形式,其中最常用的形式是 `FOR %%A IN (...) DO ...` 和 `FOR /F "..." %%A IN (...) DO ...`。嵌套循环的关键在于确保外层和内层循环变量名不重复,并合理管理路径。 #### 示例代码 以下是一个简单的嵌套 For 循环示例,展示如何遍历两个不同的目录并处理其下的文件: ```batch @ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION REM 外层循环:遍历第一个目录下的子目录 FOR /D %%I IN ("C:\ParentDir1\*") DO ( REM 内层循环:遍历第二个目录下匹配特定模式的文件 FOR %%J IN ("C:\ParentDir2\%%~nI_*.txt") DO ( ECHO Processing file: %%J from directory: %%I REM 进行具体的文件操作 TYPE "%%J" > "!OutputDir!\%%~nI_output.txt" ) ) ENDLOCAL PAUSE ``` #### 关键点解析 1. **启用延迟变量扩展** 使用 `SETLOCAL ENABLEDELAYEDEXPANSION` 启用延迟变量扩展[^2],以便在循环体内动态更新和使用变量。 2. **外层循环 (`FOR /D`)** - 遍历指定父目录下的所有子目录。 - `%%I` 是外层循环的变量,表示当前子目录名称。 3. **内层循环 (`FOR`)** - 遍历另一目录下基于外层变量命名规则的文件。 - `%%J` 是内层循环的变量,表示当前文件路径。 4. **路径拼接与转义** - 使用 `%~nI` 获取外层变量的纯文件名部分。 - 文件路径需要用双引号包裹以防空格引起错误[^1]。 --- ### 解决路径相关问题 在嵌套 For 循环中,路径相关问题是常见挑战。以下是一些解决方案: #### 1. **路径不存在或无效** - 确保脚本运行前目标路径已经创建。 - 在每次循环开始前检查路径是否存在: ```batch IF NOT EXIST "C:\ParentDir1\" ( ECHO Error: ParentDir1 does not exist. EXIT /B 1 ) ``` #### 2. **路径中含有特殊字符** - 特殊字符(如空格、& 符号等)可能导致路径解析失败。 - 始终用双引号包裹路径字符串[^1]。 #### 3. **权限不足** - 如果脚本尝试访问受保护的路径,可能引发权限错误。 - 提升脚本执行权限,或手动授予必要权限给目标路径。 #### 4. **动态路径生成** - 动态生成路径时注意避免非法字符或超出最大长度限制。 - 使用 `SET` 命令预定义路径变量以提高可读性和维护性。 --- ### 综合实例:复制文件到多个目标目录 假设有一个需求:从源目录中提取 `.log` 文件,并将其按日期分类存放到多个目标目录中。 ```batch @ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION REM 定义源目录和目标根目录 SET SourceDir=C:\Logs\ SET TargetRoot=C:\Archives\ REM 外层循环:遍历源目录下的 .log 文件 FOR %%L IN ("%SourceDir%\*.log") DO ( SET FileName=%%~nxL SET FileDate=%%~tL REM 提取年月日作为子目录名 FOR /F "tokens=1,2 delims=-/" %%Y IN ("!FileDate!") DO ( SET Year=%%Y SET Month=%%Z REM 创建目标子目录 IF NOT EXIST "%TargetRoot%!Year!\!Month!" MKDIR "%TargetRoot%!Year!\!Month!" REM 复制文件到对应子目录 COPY "%%L" "%TargetRoot%!Year!\!Month!\!FileName!" ) ) ENDLOCAL PAUSE ``` #### 关键点解析 1. **时间戳解析** - 使用 `%%~tL` 获取文件的时间戳。 - 结合 `FOR /F` 提取年份和月份。 2. **动态目录创建** - 判断目标子目录是否存在,若不存在则通过 `MKDIR` 创建。 3. **文件复制** - 将文件复制到对应的子目录中,保持原始文件名不变。 --- ### 总结 通过合理的变量管理和路径处理,可以在 Batch 脚本中轻松实现复杂的功能,例如嵌套 For 循环。始终记得启用延迟变量扩展、妥善封装路径以及提前验证输入的有效性,从而减少潜在错误的发生。 --- ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值