[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
看看这个行不?
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "cd_=%cd%"
  4. :loop
  5. set "cd_=%cd_:*\=%"
  6. set "cd_tmp=%cd_:\=%"
  7. if not "%cd_tmp%"=="%cd_%" goto loop
  8. set "folder_name=%cd_%"
  9. set n=0
  10. set sign1=1
  11. for /r "%cd%\" %%i in (*.*) do (
  12.   if not "%%~nxi" equ "%~nx0" (
  13.     set /a n+=1
  14.     set /a sign2=n%%30
  15.     if !sign2! equ 1 (
  16.        cd.>"!folder_name!_!sign1!.txt"
  17.        echo ^<tr^>>>"!folder_name!_!sign1!.txt"
  18.     )
  19.     echo ^<td^>%%~ni^</td^>>>"!folder_name!_!sign1!.txt"
  20.     set /a sign3=n%%3
  21.     if !sign3! equ 0 (
  22.        echo ^</tr^>>>"!folder_name!_!sign1!.txt"
  23.        if not !sign2! equ 0 echo ^<tr^>>>"!folder_name!_!sign1!.txt"
  24.     )
  25.     set /a sign1=n/30+1
  26. )
  27. )
  28. if not !sign3! equ 0 echo ^</tr^>>>"!folder_name!_!sign1!.txt"
  29. echo 执行完毕!&pause>nul
复制代码

[ 本帖最后由 lhjoanna 于 2008-12-30 18:14 编辑 ]

TOP

哦?刚开始是还没生成文本文件啊,楼主是要反复使用吗?如果是可以修改为建立文本文件到一个其他地址。第二个问题一开始没注意到,已经修改,在楼上更新。

TOP

n是用来计数的啊,每处理一个文件就加一个。
         set /a sign1=n/30+1是标记文件名,文件名为 !folder_name!_!sign1!.txt,每达到30个新创建一个文本,那么文本名顺序加一,这就是此句的作用。
         sign2是用来标记当前文件是否满了30,下面一句 if  !sign2! equ 1......就是当文件数达到1、31、61、91等等时,就新建一个文本文件,往新的文本文件里写入内容。   
         set /a sign3=n%%3和此句 if !sign3! equ 0 (...)一起理解。是每三个就加一对<tr></tr>。

[ 本帖最后由 lhjoanna 于 2008-12-31 20:37 编辑 ]

TOP

if not "%%~nxi" equ "%~nx0" (...)
此句是忽略批处理文件自身,防止自己也被写入到文本文件中,楼主可推测一下 %0 是什么意思。多实践下看。

TOP

回复 10楼 的帖子

把此句for /f "delims=" %%k in ('dir /ad /b "%route%"') do (...)改为for /f "delims=" %%k in ('dir /ad /b') do (...)看看。

TOP

改动了几个地方,上面题的句子改成了for /f,for /r原因我还在测试中。还有其他几个地方,你对比下即可。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "route=%cd%"
  4. set n=0
  5. set sign1=1
  6. for /f "delims=" %%k in ('dir /ad /b') do (
  7.   set "as=%%k"
  8.   for /f "delims=" %%i in ('dir /a /b !as!\thumb') do (
  9.       set /a n+=1
  10.       set /a sign2=n%%30
  11.       if !sign2! equ 1 (
  12.          cd.>"%%k_!sign1!.txt"
  13.          echo ^<tr^>>>"!as!_!sign1!.txt"
  14.       )
  15.       echo ^<td^>%%~nxi^</td^>>>"!as!_!sign1!.txt"
  16.       set /a sign3=n%%3
  17.       if !sign3! equ 0 (
  18.          echo ^</tr^>>>"!as!_!sign1!.txt"
  19.          if not !sign2! equ 0 echo ^<tr^>>>"!as!_!sign1!.txt"
  20.       )
  21.       set /a sign1=n/30+1
  22.   )
  23. if not !sign3! equ 0 echo ^</tr^>>>"%%k_!sign1!.txt"
  24. )
  25. echo 执行完毕!&pause>nul
复制代码

TOP

你是说psp后的数字与里面的文件个数有问题吧,把set n=0和set sign1=1放进第一个for循环中看下。

TOP

知道了,不只是15会出现这种情况,凡是文件个数为3的倍数,都会这样。修改如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%k in ('dir /ad /b') do (
  4.   set n=0
  5.   set sign1=1
  6.   set "as=%%k"
  7.   for /f "delims=" %%i in ('dir /a /b !as!\thumb') do (
  8.       set /a n+=1
  9.       set /a sign2=n%%30,sign3=n%%3
  10.       if !sign2! equ 1 cd.>"%%k_!sign1!.txt"
  11.       if !sign3! equ 1 echo ^<tr^>>>"!as!_!sign1!.txt"
  12.       echo ^<td^>%%~nxi^</td^>>>"!as!_!sign1!.txt"
  13.       if !sign3! equ 0 echo ^</tr^>>>"!as!_!sign1!.txt"
  14.       set /a sign1=n/30+1
  15.   )
  16.   if not !sign3! equ 0 echo ^</tr^>>>"%%k_!sign1!.txt"
  17. )
  18. echo 执行完毕!&pause>nul
复制代码

TOP

返回列表