找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30726|回复: 4

[文件操作] 批处理setlocal为何提示达到最大递归层?

[复制链接]
发表于 2011-3-30 13:59:24 | 显示全部楼层 |阅读模式
  1. @echo off&setlocal enableDelayedExpansion
  2. cd/d "D:\Source"
  3. for /d %%a in (*) do (
  4.         set "a=%%a"
  5.     for /d %%b in ("D:\Test\!a:~0,2!\!a:~2,2!\!a!") do (
  6.     set "b=%%b"
  7.     xcopy /c/q/i/s/e/k/r/h/y "%%b" "D:\Backup\%date:~0,10%%d%\!a!")
  8.         xcopy /c/q/i/s/e/k/r/h/y "%%a" "D:\Test\!a:~0,2!\!a:~2,2!\!a!"
  9. )
  10. pause

  11. @echo off&setlocal enableDelayedExpansion
  12. cd/d "D:\Source1"
  13. for /d %%a in (*) do (
  14.         set "a=%%a"
  15.     for /d %%b in ("D:\Test\!a:~0,2!\!a:~2,2!\!a!") do (
  16.     set "b=%%b"
  17.     xcopy /c/q/i/s/e/k/r/h/y "%%b" "D:\Backup\%date:~0,10%%d%\!a!")
  18.         xcopy /c/q/i/s/e/k/r/h/y "%%a" "D:\Test\!a:~0,2!\!a:~2,2!\!a!"
  19. )
  20. pause
复制代码
以上代码大致有十几段重复的,就是不同的文件夹,写在一个bat里面。

然后,我在每个setlocal结束后,加入一个endlocal,目前没有报错,请问这样有副作用么?
发表于 2011-3-30 14:11:21 | 显示全部楼层
最多32层,
发表于 2011-3-30 15:24:54 | 显示全部楼层
本帖最后由 batman 于 2011-3-30 15:26 编辑

估计这段代码是楼主自己连抄代写下来的,既然知道for嵌套,为什么还要写下十几段重复的代码,多一个for嵌套不就解决了吗,即使是要这样重复,变量延迟也只要在最前面开启一次就可以了,没必要每段都写一个setlocal enabledelayedexpansion吧!
发表于 2011-3-30 20:17:39 | 显示全部楼层
参考:批处理中特殊字符的几种处理方法
http://bbs.bathome.net/thread-1224-1-1.html
发表于 2011-3-30 22:13:18 | 显示全部楼层
无聊,补充一下吧,在FOR中用SETLOCAL一般要和ENDLOCAL一起用。没有必要就不要用那么多的延时
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 07:47 , Processed in 0.019830 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表