Board logo

标题: [其他] 批处理命令for /l 报错 [打印本页]

作者: 小渣飞    时间: 2019-8-12 11:20     标题: 批处理命令for /l 报错

请问一下问为什么for /l 会报错此时不应该有(1

for %%a in (T*) do "set /a n+=1"

for /l %%a (1,1,%n%) do call set "t=%%t%%+T%%~a"

copy /b "%t:~1%" new
作者: lihui612ld    时间: 2019-8-12 13:00

for %%a in (T*) do "set /a n+=1"

for /l %%a in (1,1,%n%) do call set "t=%%t%%+T%%~a"

copy /b "%t:~1%" new
语法错了,没有in
作者: Batcher    时间: 2019-8-12 13:06

你的思路:
  1. @echo off
  2. set "n=0"
  3. set "t="
  4. for %%a in (T*) do set /a n+=1
  5. for /l %%a in (1,1,%n%) do call set "t=%%t%%+T%%a"
  6. copy /b "%t:~1%" new
复制代码

作者: Batcher    时间: 2019-8-12 13:06

简化之后的思路:
  1. @echo off
  2. set "t="
  3. for %%a in (T*) do (
  4.     call set "t=%%t%%+%%a"
  5. )
  6. copy /b "%t:~1%" new
复制代码

作者: 小渣飞    时间: 2019-8-12 14:05

回复 2# lihui612ld


    额...大意了
作者: 小渣飞    时间: 2019-8-12 14:07

回复 4# Batcher


    嗯嗯 ,不过copy /b "%t:~1%" new 不能加""不然会提示系统找不到文件
作者: zaqmlp    时间: 2019-8-12 14:32

回复 4# Batcher

这样就不能保证按T后面的数字升序合并了
作者: 小渣飞    时间: 2019-8-12 16:07

回复 4# Batcher

用了您的方法加进去了可是最后的if判断为什么判断不出来呢没错呀还有就是好像并没有按照顺序合并=-=
  1. set "a_t=0"
  2. pushd %tmp%\~keyboard
  3. :add_file
  4. rd/s/q t1.17 2>nul
  5. for /l %%a in (1 1 3) do (
  6.     for /f "delims=:" %%b in ('type "%~f0"^|findstr /n "^:begin_%%a$"') do (
  7.         for /f "delims=:" %%c in ('type "%~f0"^|findstr /n "^:end_%%a$"') do call :loop %%a %%b %%c
  8.     )
  9.    
  10. )
  11. pause&exit
  12. :loop
  13. echo;%1[%2 %3]
  14. (for /f "tokens=1* delims=:" %%d in ('type "%~f0"^|findstr /n .*') do (
  15.     if %%d gtr %2 (if %%d lss %3 (echo;%%e))
  16. ))>t.t
  17. md t1.17 >nul
  18. pushd t1.17
  19. type %tmp%\~keyboard\t.t|debug>nul
  20. popd
  21. set "t=0"
  22. for %%a in (t1.17\T*) do (call set "t=%%t%%+%%a")
  23. copy/b t1.17\%t:~1% new
  24. set /a "a_t+=1"
  25. echo %a_t%
  26. if "a_t"=="1" (ren new 1.exe)
  27. if "a_t"=="2" (ren new 2.exe)
  28. if "a_t"=="3" (ren new 3.bmp)
  29. rd/s/q t1.17
  30. exit/b
  31. :begin_1
  32. data
  33. :end_1
  34. :begin_2
  35. data
  36. :end_2
  37. :begin_3
  38. data
  39. :end_3
复制代码

作者: 小渣飞    时间: 2019-8-12 16:26

回复 7# zaqmlp


    脑壳要炸了
作者: Batcher    时间: 2019-8-12 16:40

回复 8# 小渣飞


    3楼的代码也不行是吗?4楼的代码不知道你需要“按照顺序合并”
作者: 小渣飞    时间: 2019-8-12 17:11

回复 10# Batcher


    试过了也不行=-=-=-=-=--=-=-=
作者: netdzb    时间: 2019-8-12 19:24

回复 4# Batcher

call set "t=%%t%%+%%a"

这里的call可以省略吗?
作者: Batcher    时间: 2019-8-12 20:38

回复 12# netdzb


    不可以
作者: Batcher    时间: 2019-8-12 20:53

回复 11# 小渣飞


    测试3楼代码时使用的完整代码、测试数据、测试结果、期望结果,打包压缩传上来我试试。
作者: 小渣飞    时间: 2019-8-13 10:01

回复 14# Batcher

解决了,原来是我大意了把开头的cd /d "%~dp0"给去掉了结果造成了findstr找不到标签导致type无法写出数据给debug......




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