Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 后藤在这个时候出人意料。批处理文件_If Statement_Batch File - Fatal编程技术网

If statement 后藤在这个时候出人意料。批处理文件

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

我的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 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
inside
for
是打破循环的好方法(只有我知道)。从来没有问题。
set "line=%%a"
if not "!line:subversion=!"=="%%a" goto GETVERSION
set "line=%%a"
if not "!line:subversion=!"=="%%a" goto GETVERSION