[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 【已解决】这段批处理代码为什么不正确?

本帖最后由 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

回复 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分配任务。

TOP

回复 7# chouxia


    我这里测试没有发现问题。把你的完整代码发出来,还有找一个txt也发上来,我试试。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

这是我做的批处理中的一部分
下面的没办法调试。
请忽略“系统找不到指定的路径。”的错误提示

TOP

必须在。在整个批处理开始就会判断文件夹是否存在

TOP

v:\1data
这个目录存在吗?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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>

TOP

语法不正确是执行完哪行命令之后出现的?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

TOP

返回列表