Board logo

标题: [其他] 【已解决】这段批处理代码为什么不正确? [打印本页]

作者: chouxia    时间: 2014-10-26 11:17     标题: 【已解决】这段批处理代码为什么不正确?

本帖最后由 chouxia 于 2014-10-28 08:17 编辑
  1. @echo on
  2. setlocal enabledelayedexpansion
  3. set num=0
  4. set inipath=0
  5. set dataname=0
  6. cd v:\1data
  7. for /f %%z in ('findstr /s /i /m "data=1" *.txt') do (
  8. for /f "tokens=1,* delims=="  %%a in ('find "num" ^< %%z') do ( set num=%%b )
  9. for /f "tokens=1,* delims=="  %%c in ('find "inipath" ^< %%z') do ( set inipath=%%d )
  10. for /f "tokens=1,* delims=="  %%g in ('find "dataname" ^< %%z') do ( set dataname=%%h )
  11. echo NO.0              !num!          !inipath!         !dataname!
  12. for /l %%i in (1,1,!num!) do (
  13. if not exist v:!inipath!\work_%%i.avi
  14. echo ok
  15. if exist v:!inipath!\work_%%i.avi
  16. echo n-----ok
  17. )
  18. )
复制代码
执行的时候提示我语法不正确
if not exist v:!inipath!\work_%i.avi
而且 echo NO.        0 !num!                !inipath!          !dataname!
这行根本没显示
变量!num!为何没有数据?
执行到echo NO.        0 !num!                !inipath!          !dataname!截止
既:后面的for  in  do 都不在的话输出内容如下:
NO. 0 5         \1temp\20141007183419010016h   20141007183419010016h
NO. 0 5         \1temp\20141007183419010016s   20141007183419010016s
NO. 0 5         \1temp\20141007183419060016h   20141007183419060016h
NO. 0 5         \1temp\20141007183419060016s   20141007183419060016s
作者: chouxia    时间: 2014-10-26 11:20

其实我想实现这样的功能。
上面的for /f 输出配置信息。将符合条件的内容交给下面的for /l进行循环。
符合条件的内容可能很多个,批处理执行的时候这些内容被依次放到for /l循环中。
作者: Batcher    时间: 2014-10-26 12:15

语法不正确是执行完哪行命令之后出现的?
作者: chouxia    时间: 2014-10-26 12:19

本帖最后由 chouxia 于 2014-10-26 12:49 编辑

V:\run>b

V:\run>setlocal enabledelayedexpansion

V:\run>set num=0

V:\run>set inipath=0

V:\run>set dataname=0

V:\run>cd v:\1data
系统找不到指定的路径。
命令语法不正确。

V:\run>                if not exist v:!inipath!\work_%i.avi

V:\run>
作者: Batcher    时间: 2014-10-26 15:30

v:\1data
这个目录存在吗?
作者: chouxia    时间: 2014-10-26 16:19

必须在。在整个批处理开始就会判断文件夹是否存在
作者: chouxia    时间: 2014-10-26 16:22

这是我做的批处理中的一部分
下面的没办法调试。
请忽略“系统找不到指定的路径。”的错误提示
作者: Batcher    时间: 2014-10-26 16:48

回复 7# chouxia


    我这里测试没有发现问题。把你的完整代码发出来,还有找一个txt也发上来,我试试。
作者: chouxia    时间: 2014-10-26 20:20

回复 8# Batcher


    整个批处理内容如下:
@echo on
setlocal enabledelayedexpansion
:topavi
cd v:\1aep
for /f %%z in ('findstr /s /i /m "rendering=1" *.txt') do (
for /f "tokens=1,* delims=="  %%a in ('find "filenumber" ^< %%z') do ( set filenumber=%%b )
for /f "tokens=1,* delims=="  %%c in ('find "inipath" ^< %%z') do ( set inipath=%%d )
for /f "tokens=1,* delims=="  %%g in ('find "aepname" ^< %%z') do ( set aepname=%%h )       
echo          !filenumber!        !inipath!  !aepname!
for /l %%i in (1,1,!filenumber! ) do (
        if not exist v:!inipath!\work_%%i.avi (
        echo 渲染任务没有完成!
        goto topmp4 )
                for /f "delims=" %%e in ("v:!inipath!\work_%%i.avi") do (
                if /i %%~ze gtr 0 (
                timeout /t 3 >nul
                        for /f "delims=" %%j in ("v:!inipath!\work_%%i.avi") do (
                        timeout /t 3 >nul
                                if /i %%~ze equ %%~zj ( echo %time% %date%  工程执行完成!修改配置文件!) & ( v:\run\sed -i s/rendering=1/rendering=1/g v:\1aep\!aepname!.txt ) else timeout /t 3 & goto topavi )
                        )
                )
        )
)
)
:topmp4
cd v:\1aep
for /f %%z in ('findstr /s /i /m "rendering=3" *.txt') do (
for /f "tokens=1,* delims=="  %%a in ('find "filenumber" ^< %%z') do ( set filenumber=%%b )
for /f "tokens=1,* delims=="  %%c in ('find "inipath" ^< %%z') do ( set inipath=%%d )
for /f "tokens=1,* delims=="  %%g in ('find "aepname" ^< %%z') do ( set aepname=%%h )
echo          !filenumber!        !inipath!  !aepname!
for /l %%i in (1,1,!filenumber!) do (
        if not exist v:!inipath!\work_%%i.avi (
        echo 渲染任务没有完成!
        goto topmp4 )
                for /f "delims=" %%e in ("v:!inipath!\work_%%i.avi") do (
                if %%~ze gtr 0 (
                timeout /t 3 >nul
                        for /f "delims=" %%j in ("v:!inipath!\work_%%i.avi") do (
                        timeout /t 3 >nul
                        if !ba! equ !bb! ( echo %time% %date%  任务执行完成!修改配置文件!) & ( v:\run\sed -i s/rendering=3/rendering=4/g v:\1aep\!aepname!.txt ) else timeout /t 3 & goto topavi )
                        )
                )
        )
)
)
:endmp4
echo 休眠30秒!
timeout /t 30
goto topavi

下面是txt内容:
[General]
name=20141007183419010016h
Frame=627
rendering=1
del=0
comp=oak
inipath=\1avi\20141007183419010016h
aepname=20141007183419010016h
min=1000
filenumber=7
PS:这个是完整的批处理了。
整体功能实现分1.bat 2.bat   3.bat
3个部分完成的。这个是2.bat     1.bat负责环境检查、给2.bat和3.bat分配任务。




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