If statement 后藤在这个时候出人意料。批处理文件
我的Windows批处理文件中出现“此时转到意外”错误。就像下面一样。我不知道。有人可以帮我吗?谢谢If statement 后藤在这个时候出人意料。批处理文件,if-statement,batch-file,If Statement,Batch File,我的Windows批处理文件中出现“此时转到意外”错误。就像下面一样。我不知道。有人可以帮我吗?谢谢 @setlocal EnableExtensions EnableDelayedExpansion @echo off SET TEMPERL=%TMP%\perlversion.txt for /f "tokens=*" %%a in (%TEMPERL%) do ( set line=%%a if not "%line:subversion%"=="%line%" goto GE
@setlocal EnableExtensions EnableDelayedExpansion
@echo off
SET TEMPERL=%TMP%\perlversion.txt
for /f "tokens=*" %%a in (%TEMPERL%) do (
set line=%%a
if not "%line:subversion%"=="%line%" goto GETVERSION
)
:GETVERSION
set mainver=%line:*perl=%
set mainver=%mainver:~1,1%
echo This is perl %mainver%
:END
endlocal
试试这个:
@echo off
setlocal EnableExtensions
SET "TEMPERL=%TMP%\perlversion.txt"
for /f "usebackqdelims=" %%a in ("%TEMPERL%") do (
set "line=%%a"
SETLOCAL EnableDelayedExpansion
if not "!line:subversion=!"=="!line!" (
set "mainver=!line:*perl=!"
set "mainver=!mainver:~1,1!"
echo This is Perl !mainver!
)
ENDLOCAL
)
您不应将for
循环代码块与转到
。这使得cmd
不稳定
您也可以尝试以下方法(适用于草莓Perl):
在
FOR
循环中,您需要
set "line=%%a"
if not "!line:subversion=!"=="%%a" goto GETVERSION
或
因为%line%
(或任何%
var%
)意味着变量的解析时间值,也就是说,它位于FOR
开始执行之前<代码>代码>变量
表示var
的运行时值,也就是说,当它在循环过程中更改时-但仅当执行了setlocal enabledelayedexpansion
时(在本例中是这样)
还要注意第二个之前的=
代码>。这在变量中引入了替换字符串-替换目标的字符串(在:
和=
之间),该结构因此使用[nothing]替换的任何字符串subversion
计算行的值
还请注意,在集合行=%%a
行中的%%a
后面有尾随空格。虽然您所发布的内容看起来基本正确,但后面的空格包含在指定的值中,因此%%a
和!排队代码>不是一回事。将语句括在引号中的方法确保分配的字符串中不包含任何多余的尾随空格。最好使用这种结构——它可以节省大量追逐周围看不见的空间的麻烦
最后,我不能保证您对MAINVER
的解码是正确的,因为您没有在perlversion.txt
如果文件(或文件本身)中不存在目标行(包含字符串subversion
)缺少,您可能会得到意外的结果。您不需要然后
?您尝试过使用!variable!而不是%variable%inside FOR loop吗?@DevZer0然后批处理中不需要。恩多,使用goto离开循环是一种常见的技术-它根本不会使cmd不稳定。@foxidrive我不知道发生了什么事如果你这样做的话,cmd('stack','heap')的内存管理。所以我总是尽量避免这种情况,我从不使用它,也从不需要它:)谢谢你的评论。goto
insidefor
是打破循环的好方法(只有我知道)。从来没有问题。
set "line=%%a"
if not "!line:subversion=!"=="%%a" goto GETVERSION
set "line=%%a"
if not "!line:subversion=!"=="%%a" goto GETVERSION