Board logo

标题: [文件操作] 批处理setlocal为何提示达到最大递归层? [打印本页]

作者: purrpig    时间: 2011-3-30 13:59     标题: 批处理setlocal为何提示达到最大递归层?

  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,目前没有报错,请问这样有副作用么?
作者: wc726842270    时间: 2011-3-30 14:11

最多32层,
作者: batman    时间: 2011-3-30 15:24

本帖最后由 batman 于 2011-3-30 15:26 编辑

估计这段代码是楼主自己连抄代写下来的,既然知道for嵌套,为什么还要写下十几段重复的代码,多一个for嵌套不就解决了吗,即使是要这样重复,变量延迟也只要在最前面开启一次就可以了,没必要每段都写一个setlocal enabledelayedexpansion吧!
作者: Batcher    时间: 2011-3-30 20:17

参考:批处理中特殊字符的几种处理方法
http://bbs.bathome.net/thread-1224-1-1.html
作者: wc726842270    时间: 2011-3-30 22:13

无聊,补充一下吧,在FOR中用SETLOCAL一般要和ENDLOCAL一起用。没有必要就不要用那么多的延时




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2