Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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
Windows 批处理文件:调用参数中的转义?_Windows_Batch File_Call - Fatal编程技术网

Windows 批处理文件:调用参数中的转义?

Windows 批处理文件:调用参数中的转义?,windows,batch-file,call,Windows,Batch File,Call,我有一个批处理文件,读取一行文本,我可以转义,但这是必要的 我需要将此文件部署到一个小用户群,因此在每个人的PC上安装sed不是一个选项 所以我一直在尝试用批处理文件来实现这一点 输入: TAG1 GRfoo XY ^(as generated by Boolean^) minimum enclosed area ^(um2^) ^> ^= 0.10 。。。该输入最终在以下代码行中解析: for /f "usebackq tokens=2*" %%i in (`echo %*`) DO

我有一个批处理文件,读取一行文本,我可以转义,但这是必要的

我需要将此文件部署到一个小用户群,因此在每个人的PC上安装sed不是一个选项

所以我一直在尝试用批处理文件来实现这一点

输入:

TAG1 GRfoo XY ^(as generated by Boolean^) minimum enclosed area ^(um2^) ^> ^= 0.10
。。。该输入最终在以下代码行中解析:

for /f "usebackq tokens=2*" %%i in (`echo %*`) DO (
。。。其中,%*是通过调用传递的参数:CALL:retTokenThreePlus!标语

我已经尝试了各种逃避>:^>^^^^>,^^^^^>等的组合

我似乎不知道如何不让>从传递给:retTokenThreePlus方法的内容中消失

谢谢

批处理文件相关代码:

IF "%3"=="" (
  :: This monstrosity sets tagline to the FINDSTR result.
  for /f "usebackq tokens=*" %%a in (`FINDSTR /C:"TAG%2 " %tagfile%`) do set tagline=%%a
  call:retTokenTwo !tagline!
  set tagrule=!token!
  echo !tagline!
  call:retTokenThreePlus !tagline!
  set CMDLINE=!CMDLINE! !tagrule! !token!
  goto :write
)

:: Method to return only the second token of the parm list passed to it
:retTokenTwo
  set token=%2
  echo TOKEN2 %token%
  goto :eof

:: Method to return tokens 3+ of the parm list passed to it
:retTokenThreePlus
  REM setlocal enabledelayedexpansion
  for /f "usebackq tokens=2*" %%i in (`echo %*`) DO (
    set "token=%%j"
  )
  REM echo TOKEN3 !token!
  goto :eof
回波打开时的输出:

C:\gf28hpp\layout\icwinlp>set CMDLINE=$ 

C:\gf28hpp\layout\icwinlp>set token="" 

C:\gf28hpp\layout\icwinlp>IF "" == "" (
for /F "usebackq tokens=*" %a in (`FINDSTR /C:"TAG1 " block_checkdrc.tags`) do set tagline=%a  
 call:retTokenTwo !tagline!  
 set tagrule=!token!  
 echo !tagline!  
 call:retTokenThreePlus !!tagline!!  
 set CMDLINE=!CMDLINE! !tagrule! !token!  
 goto :write 
)  ELSE (
 ...[redacted]... 
) )  
) 

C:\gf28hpp\layout\icwinlp>set tagline=TAG1 GRfoo XY ^(as generated by Boolean^) minimum enclosed area ^(um2^) ^> ^= 0.10 

C:\gf28hpp\layout\icwinlp>set token=GRfoo 

C:\gf28hpp\layout\icwinlp>echo TOKEN2 GRfoo 
TOKEN2 GRfoo

C:\gf28hpp\layout\icwinlp>goto :eof 
TAG1 GRfoo XY ^(as generated by Boolean^) minimum enclosed area ^(um2^) ^> ^= 0.10

C:\gf28hpp\layout\icwinlp>REM setlocal enabledelayedexpansion 

C:\gf28hpp\layout\icwinlp>for /F "usebackq tokens=2*" %i in (`echo TAG1 GRfoo XY (as generated by Boolean) minimum enclosed area (um2) `) DO (set "token=%j" ) 

C:\gf28hpp\layout\icwinlp>(set "token=XY (as generated by Boolean) minimum enclosed area (um2) " ) 

C:\gf28hpp\layout\icwinlp>REM echo TOKEN3 !token! 

C:\gf28hpp\layout\icwinlp>goto :eof

你有没有试着用>字符将值写入一个文件,然后从那里读取它?@JasonFaulkner-没有。我的一部分坚持认为这是不必要的。更多地使用它,可能是调用丢失了这些字符串中的and<。但我也不明白为什么调用没有通过转义^Better解决方案的%*参数,因为我可以编辑正在解析的输入。。。在包含<或>的整个输入字符串周围添加双引号。忘了里面的批通配符吧。虽然它通过我的输出。哦,好吧,也许a会有好处?如果不相关,我道歉。我有一只脚离开了门,不能对你的问题给予应有的关注。图德尔@罗乔。。。可能吧。我想没有什么递归方法不能解决的。