标题: [其他] 【已解决】这段批处理代码为什么不正确? [打印本页]
作者: chouxia 时间: 2014-10-26 11:17 标题: 【已解决】这段批处理代码为什么不正确?
本帖最后由 chouxia 于 2014-10-28 08:17 编辑
- @echo on
- setlocal enabledelayedexpansion
- set num=0
- set inipath=0
- set dataname=0
- cd v:\1data
- for /f %%z in ('findstr /s /i /m "data=1" *.txt') do (
- for /f "tokens=1,* delims==" %%a in ('find "num" ^< %%z') do ( set num=%%b )
- for /f "tokens=1,* delims==" %%c in ('find "inipath" ^< %%z') do ( set inipath=%%d )
- for /f "tokens=1,* delims==" %%g in ('find "dataname" ^< %%z') do ( set dataname=%%h )
- echo NO.0 !num! !inipath! !dataname!
- for /l %%i in (1,1,!num!) do (
- if not exist v:!inipath!\work_%%i.avi
- echo ok
- if exist v:!inipath!\work_%%i.avi
- echo n-----ok
- )
- )
复制代码
执行的时候提示我语法不正确
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 |