解析改写源文件的代码
:: @随风 @bbs.bathome.net @2009-04-17
有助于新手进一步理解for的原理。- @echo off
- for /f "delims=" %%a in (a.txt) do (
- if not defined flag (
- echo abcdefg>a.txt
- echo %%a>>a.txt
- set flag=a
- ) else (
- echo %%a>>a.txt
- )
- )
- pause
复制代码 这是一个改写源文件a.txt的代码,在源文件的第一行插入字符串 abcdefg
解析:
1、for /f "delims=" %%a in (a.txt) do
当运行了上面一句以后(注意此时还没有运行 do 后面的命令,
我们可以理解为for已经把a.txt的所有内容以行为单位保存到了内存。
也可以理解为此时a.txt是否存在或里面的内容是否改变已经不重要了。
2、开始运行do 后面的命令
后面的命令很简单,其实只有一个 if 。。。else 。。 语句。
if not defined flag (
echo abcdefg>a.txt
echo %%a>>a.txt
set flag=a
该命令的意思是当变量flag没有被定义时则运行
echo abcdefg>a.txt 重定向abcdefg到a.txt并覆盖源内容
echo %%a>>a.txt 追加%%a到a.txt(此时%%a为源a.txt内容的第一行)
set flag=a 给变量flag定义,此句给flag定义什么值不重要,主要是给flag定义,以保证下次不再运行上面几句
至此for的第一次循环完毕。
3、当下一次循环时,因为上一次已经运行了 set flag=a
所以 if 语句不成立,所以会执行 else 后面的命令
也就是 echo %%a>>a.txt (此时%%a为原a.txt的第二行内容)
依此类推。。。直到循环全部完成。
.
[ 本帖最后由 随风 于 2009-4-17 23:30 编辑 ] |