2014-10-16 102 views
2

我有以下脚本:逃逸报价/ F符

@ECHO OFF 
FOR /F "tokens=*" %%A IN (%ThisService_WorkingDirectory%MPMissions\%ThisService_mapname%\init.sqf) DO (
    ECHO %%A 
    IF "%%A" EQU "call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";    //Compile regular functions" (
    TYPE D:\snapbuild\snapbuild.txt 
) 
) >> temp.txt 
move /y temp.txt %ThisService_WorkingDirectory%MPMissions\%ThisService_mapname%\init.sqf 

我的问题是以下部分:

IF "%%A" EQU "call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";    //Compile regular functions" (

是不是corretly逃逸内引号。我曾尝试使用/“,^”,“”(加倍引号),但没有一个正在转义引号。

我该怎么做?

+0

我想在preprocessFileLineNumbers的末尾缺少一个引号?在'EQU'中调用compile preprocessFileLineNumbers“' – Behavior 2014-10-16 17:05:35

+0

不,我在寻找: 调用compile preprocessFileLineNumbers”\ z \ addons \ dayz_code \ init \ compiles.sqf“; //编译常规函数 – user3662307 2014-10-16 17:20:18

+1

将内部引号中的内容变为变量,然后在if语句中进行比较。 – jftuga 2014-10-16 17:54:14

回答

1

取出"然后进行测试:

@ECHO OFF 
setlocal enabledelayedexpansion 
FOR /F "tokens=*" %%A IN (%ThisService_WorkingDirectory%MPMissions\%ThisService_mapname%\init.sqf) DO (
    ECHO %%A 
    set "$Var=%%A" 
    set "$Var=!$Var:"=!" 
    IF "!$Var!"=="call compile preprocessFileLineNumbers \z\addons\dayz_code\init\compiles.sqf";    //Compile regular functions" (
    TYPE D:\snapbuild\snapbuild.txt 
) 
) >> temp.txt 
move /y temp.txt %ThisService_WorkingDirectory%MPMissions\%ThisService_mapname%\init.sqf 
1

我想SachaDee的解决方案应该工作,但它也可以像jftuga提到将其与报价进行比较。
但是,你需要使用延迟扩展。

@ECHO OFF 
setlocal EnableDelayedExpansion 
set "search=call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";    //Compile regular functions" 
FOR /F "tokens=*" %%A IN (%ThisService_WorkingDirectory%MPMissions\%ThisService_mapname%\init.sqf) DO (
    ECHO %%A 
    IF "%%A" EQU "!search!" (
    TYPE D:\snapbuild\snapbuild.txt 
) 
) 
+1

+1,但该文件可能包含'!',这将需要延迟扩展切换。 – dbenham 2014-10-17 01:01:13

1

您确定IF语句失败吗?对我来说,它没有任何泄漏就很好。

例如,在OK结果如下:

IF "call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";    //Compile regular functions" EQU "call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";    //Compile regular functions" (echo OK) else echo FAIL 

这将是一个不同的故事,如果内引用字符串包含以下任何一项,因为解析器将看不到他们所报:

  • 空间
  • ,
  • ;
  • =
  • &
  • |
  • <
  • >
  • )
  • ^

不幸的是,你无法逃避的内部"内引用的字符串。相反,您必须使用^转义上述每个字符。

但是,而不是这样做,我可能会使用jeb的解决方案,比较使用延迟扩展的变量值。