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

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

[复制链接]
发表于 2014-10-26 11:17:04 | 显示全部楼层 |阅读模式
本帖最后由 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
 楼主| 发表于 2014-10-26 11:20:31 | 显示全部楼层
其实我想实现这样的功能。
上面的for /f 输出配置信息。将符合条件的内容交给下面的for /l进行循环。
符合条件的内容可能很多个,批处理执行的时候这些内容被依次放到for /l循环中。
发表于 2014-10-26 12:15:02 | 显示全部楼层
语法不正确是执行完哪行命令之后出现的?
 楼主| 发表于 2014-10-26 12:19:09 | 显示全部楼层
本帖最后由 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>
发表于 2014-10-26 15:30:56 | 显示全部楼层
v:\1data
这个目录存在吗?
 楼主| 发表于 2014-10-26 16:19:42 | 显示全部楼层
必须在。在整个批处理开始就会判断文件夹是否存在
 楼主| 发表于 2014-10-26 16:22:59 | 显示全部楼层
这是我做的批处理中的一部分
下面的没办法调试。
请忽略“系统找不到指定的路径。”的错误提示
发表于 2014-10-26 16:48:54 | 显示全部楼层
回复 7# chouxia


    我这里测试没有发现问题。把你的完整代码发出来,还有找一个txt也发上来,我试试。
 楼主| 发表于 2014-10-26 20:20:47 | 显示全部楼层
回复 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分配任务。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 16:39 , Processed in 0.018159 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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