- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我只是在尝试一些基本的批处理编程。我在执行过程中遇到一些错误
set /a x=0
:while1
if %x% leq 5 (
echo %x%
goto:callfun
/dir:/Prod /user:admin /pass:anc /level:error >> C:\Logs\A.txt
set file=C:\Logs\J_FINANCIALS_EVENING.log
set /a "cnt=0"
for /f %%a in ('type "%file%"^|find "!Kitchen.Error.NoRepDefinied!" /i /c') do set /a cnt=%%a
if %cnt% NEQ 0 (
if %x% NEQ 5 (
DEL C:\Logs\abc.txt
)
set /a x=x+1
goto :while1
)
echo "OUTSIDE LOOP"
echo The Status is %errorlevel%
call:check_file
exit /b %errorlevel%
)
endlocal
callfun:
CALL C:\Pentaho\pdi-ce-5.2.0.0-209\data-integration\kitchen.bat /rep:"Admin" /job:"XXXX"
我在
收到错误设置/a "x = 0"
0此时出乎意料。
我在这里做错了什么?
最佳答案
每集约20亿的delayedexpansion
在 block 语句(括号中的一系列语句)
中,整个 block 被解析并然后执行。 block 中的任何 %var%
都将被该变量的值替换在 block 被解析时 - 在执行 block 之前 - 同样的事情适用于 FOR ... DO( block )
。
因此,IF (something) else (somethingelse)
将在 IF
时使用 %variables%
的值执行遇到了。
克服这个问题的两种常见方法是 1) 使用 setlocal enabledelayedexpansion
并使用 !var!
代替 %var%
来访问var
的更改值或 2) 调用子例程以使用更改后的值执行进一步处理。
因此 - 简单修复:
SETLOCAL ENABLEDELAYEDEXPANSION
set /a x=0
:while1
if %x% leq 5 (
echo !x!
goto callfun
REM this following line appear to make no sense in winbatch
/dir:/Prod /user:admin /pass:anc /level:error >> C:\Logs\A.txt
set "file=C:\Logs\J_FINANCIALS_EVENING.log"
set /a cnt=0
for /f %%a in ('type "%file%"^|find "!Kitchen.Error.NoRepDefinied!" /i /c') do set /a cnt=%%a
if !cnt! NEQ 0 (
if !x! NEQ 5 (
DEL C:\Logs\abc.txt
)
set /a x=x+1
goto while1
)
echo "OUTSIDE LOOP"
echo The Status is !errorlevel!
call :check_file
exit /b !errorlevel!
)
endlocal
REM Note that this will fall-through to the process. Best add
GOTO :EOF
REM Here.
REM Colon must precede label
:callfun
CALL C:\Pentaho\pdi-ce-5.2.0.0-209\data-integration\kitchen.bat /rep:"Admin" /job:"XXXX"
REM Note that this would exit the subroutine by reaching (apparent) EOF. Best add
GOTO :EOF
REM Here - as a habit - it contributes to preventing fall-through failures
REM if you add a new subroutine and forget to include the newly-required goto :eof
注意事项:
GOTO 不要求标签上有冒号except :EOF
的特殊情况定义为end文件的
SET/a 不需要引号。
SET "stringname=stringvalue"是字符串赋值的良好语法,因为引号导致行中的任何尾随空格不包含在赋值中。
在循环中变化的任何 %var%
都应该变成 !var!
并带有 delayedexpansion
以访问 运行时
而不是 parse-time
值。
(我只解决了延迟扩展错误 - 其他问题用 REM 标记)
关于Windows 批处理编程——此时出乎意料,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27064886/
一直在断断续续做一个项目,2个月没碰了,今天回来,报错无法运行。 IEnumerable query = mediaTitleCollection.OfType(); 调试器在此行停止并给出标题中描述
我最近读了一篇 article关于生成变更日志,我想将其集成到 package.json 脚本中。 我用正确的项目名称稍微更改了文章中的脚本,并将输出导出到 CHANGELOG.md "script
我添加了这段代码,现在我得到了一个意想不到的标记";"错误。 代码: var i = 0; var tabs = ""; while(i "+ idArray[i] +" &nbs
@echo off for /f "tokens=1,2 delims=," %%x in (my.csv) do ( if %M% LSS %%x set M=%%x ) echo Max X Va
我正在尝试重命名我的 Room 数据库中的列。我傻傻的用了列名index,想改成id,但是这个迁移函数很头疼: static final Migration MIGRATION_2_3 = new M
我不确定这是否是一个错误。代码编译得很好(没有警告),但是当我输入一个方法时,本地值(NSMutableString)会在调试器中显示以下内容: __NSAutoreleaseFreedObject(
这个问题在这里已经有了答案: Synchronous/Asynchronous behaviour of python Pipes (1 个回答) 关闭4个月前。 我正在做一个从 udp 套接字接收样
我是一名优秀的程序员,十分优秀!