Batch file 多个IF-else条件问题

Batch file 多个IF-else条件问题,batch-file,if-statement,Batch File,If Statement,我有一个问题,我想根据搜索项将文件分离/拆分为多个文件。 如果我看到add,我想把那一行放到addfile。 类似于changeprop,插入,如果找不到任何匹配项,则插入到otherfile。我无法处理if-else条件 FOR /F "tokens=* delims=" %%a in ('TYPE "%File%"') DO ( SET "eachline=%%a" IF /i "!eachline:~0,3!" == "ADD " (ECHO !eachline!>&

我有一个问题,我想根据搜索项将文件分离/拆分为多个文件。
如果我看到
add
,我想把那一行放到
addfile
。 类似于
changeprop
,插入,如果找不到任何匹配项,则插入到
otherfile
。我无法处理
if-else
条件

FOR /F "tokens=* delims=" %%a in ('TYPE "%File%"') DO (
    SET "eachline=%%a"
    IF /i "!eachline:~0,3!" == "ADD " (ECHO !eachline!>>"%ADDActionScriptsMergedFile%")
    ELSE ( IF /i "!eachline:~0,9!" == "ADDINSERT" (ECHO !eachline!>>"%ADDINSERTActionScriptsMergedFile%")
        ELSE ( IF /i "!eachline:~0,3!" == "MOV" (ECHO !eachline!>>"%MOVEActionScriptsMergedFile%")
            ELSE ( IF /i "!eachline:~0,6!" == "INSERT" (ECHO !eachline!>>"%INSERTPROPActionScriptsMergedFile%")
                ELSE ( IF /i "!eachline:~0,10!" == "CHANGEPROP" (ECHO !eachline!>>"%CHANGEPROPActionScriptsMergedFile%")
                    ELSE (ECHO !eachline!>>"%OTHERPROPActionScriptsMergedFile%")
                )
            )
        )
    )
)

试试这个。它是基于我的,但做了一些更改以避免多次编写相同的代码(两次还可以,但现在是5次(甚至更多),使用
for
循环是有意义的):


(未测试,因为我没有您的文件或文件夹结构)

如我在评论中所述,如果/
否则
的语法不正确。一般语法是,在任何开始的代码块括号之前都应该有一个空格,而在结束的代码块括号之后的空格并没有严格的问题,即使技术上不正确
ELSE
不是单独的命令,它取决于
IF
,因此必须在同一行中读取

基于您最新提供的代码的示例:

FOR/F“TOKENS=*DELIMS=“%%a IN('TYPE”%File%')DO(设置“eachline=%%a”
如果/I“!eachline:~0,3!”==“添加”(>>“%ADDActionScriptsMergedFile%”ECHO!eachline!
)ELSE(如果/I“!eachline:~0,9!”==“ADDINSERT”(>>“%ADDINSERTActionScriptsMergedFile%”)ECHO!eachline!
)ELSE(如果/I“!eachline:~0,3!”==“MOV”(>>“%MOVEActionScriptsMergedFile%”)ECHO!eachline!
)ELSE(如果/I“!eachline:~0,6!”==“插入”(>>“%INSERTPROPActionScriptsMergedFile%”)ECHO!eachline!
)ELSE(如果/I“!eachline:~0,10!”==“CHANGEPROP”(>>“%CHANGEPROPActionScriptsMergedFile%”)ECHO!eachline!
)ELSE>>“%OTHERPROPActionScriptsMergedFile%”ECHO!每个链接!
)
)
)
)
)

*你会注意到我更改了
IF/I”!eachline:~0,3!==“ADD”(
IF/I”!eachline:~0,3!==“ADD”(
,因为我假设它是一个打字错误,(
“!eachline:~0,3!”
总是3个字符,不包括双引号,所以它永远不能等于
“ADD”
)中的四个字符。

对于/F“tokens=*delims=”%%a in('TYPE“c:\Inputfile.txt“')DO(SET“eachline=%%a”IF/i!eachline:~0,3!”==“ADD”(ECHO!eachline!>>“c:\ADD.txt”)ELSE(IF/i”!eachline:~0,9!”==“ADDINSERT”(ECHO!eachline!>>“c:\ADDINSERT.txt”)ELSE(IF/i”!eachline:~0,3!==“MOV”(ECHO!eachline!>>“c MOVE.txt)ELSE)(IF/i!=6,“INSERT”(ECHO!eachline!>>“c:\INSERT.txt”)ELSE(如果/i“!eachline:~0,10!”==“CHANGEPROP”(ECHO!eachline!>>“c:\CHANGEPRO.txt”)ELSE(ECHO!eachline!>>“OTHER.txt”))))此最新注释是没有变量的代码。为方便起见。如果找到任何匹配项,则将该行推送到该特定文件。如果不匹配,则将该行推送到另一个.txt文件。
ELSE(
应与结尾的
if
括号,即
)ELSE
)ELSE
Stephen-工作得很有魅力。Namaste。我用你的代码引用调整了代码以满足我的要求。不知何故,无法像往常一样在这里正确格式化。我也将了解到:)1秒内10k行:)@ECHO off SETLOCAL enabledelayedexpansion SET File=%AllActionScriptsMergedMotorderedFile%%a in(“添加”“移动”插入“changeprop”)do(键入%File%\findstr/b/i/c:%%A“>%FinalActionFolderName%\%%A\u WorkFlows.txt”)键入%File%\findstr/biv/c:“add”/biv/c:“Move”/biv/c:“insert”/biv/c:“changeprop”>%FinalActionFolderName%\OTHERPROP\u WorkFlows.txt“当您使用
运行它并检查输出时,您会注意到一些”双双引号。提示:深入查看我的代码。我在引号中有一个参数(因为它包含一个空格),然后用
%%~a
删除这些引号。当您用findstr命令将
%%%a
替换为
%%~a
时,在
%FinalActionFolderName%\%a\u.txt中“
,您的代码应该可以正常工作。
@echo off
setlocal
set "File=.\WorkFlow_Action_Script_Merged_Folder\All_WorkFlows_Merged_File.txt"
set "Dest=.\WorkFlow_Action_Script_Merged_Folder\@_WorkFlows_Merged_File.txt"
for %%a in ("Add " Addinsert Mov Insert Changeprop) do (
  type "%File%" | findstr /bic:"%%~a" > "%Dest:@=%%~a%"
)
type "%File%" |findstr /bivc:"Addinsert" /bivc:"Mov" /bivc:"Insert" /bivc:"Changeprop" /bivc:"Add " > "%Dest:@=OTHERPROP%"