Batch file 此批处理脚本中的语法错误是什么?

Batch file 此批处理脚本中的语法错误是什么?,batch-file,substring,Batch File,Substring,我试图从字符串中获取一个子字符串,并检查它是否等于“System”。我正在从%%a获取字符串。当我运行脚本时,我得到错误“unexpected”(“。如果我删除for循环中的行(“set _varsub…”),错误就会消失。因此我认为我的substring命令有语法错误。有人能告诉我吗 for /f "tokens=1,3,4,* delims=: " %%a in ('e:\DeployTools\handle.exe %deploymentdir%\%%i ^| findstr /i p

我试图从字符串中获取一个子字符串,并检查它是否等于“System”。我正在从%%a获取字符串。当我运行脚本时,我得到错误“unexpected”(“。如果我删除for循环中的行(“set _varsub…”),错误就会消失。因此我认为我的substring命令有语法错误。有人能告诉我吗

  for /f "tokens=1,3,4,* delims=: " %%a in ('e:\DeployTools\handle.exe %deploymentdir%\%%i ^| findstr /i pid: ')  do @(


        set _varsub=%%a
        set _varsub=%_varsub:~0,6%
        if not %_varsubstring%==System (

        // do something
      )

尝试在if语句中的变量周围加引号

if not '%_varsubstring%'=='System' (...
意外错误是因为_varsubstring在该点未定义,因此该行的计算结果为:

if not ==System (

正如StockKnight所写,由于未定义变量,您的代码将失败,
但即使这样,它也会失败,因为括号内的扩展对percentd不起作用。
在您的情况下,应该使用带感叹号的延迟扩展

set _varsub=%%a
set _varsub=!_varsub:~0,6!