Batch file 批处理文件内部for循环不会提取令牌值

Batch file 批处理文件内部for循环不会提取令牌值,batch-file,cmd,Batch File,Cmd,我在一个测试文件中循环,分解查询文本。我想基于工作负载值创建子目录,但我的内部for循环没有提取令牌值 我无法找出该变量的格式有什么问题,我只是得到以下错误: 以下是批处理文件调用: split.bat UTF_Extract_Queries_UTF_Customer_Benchmark_Monday.btq QueryId UTF_Customer_Benchmark_Monday 这是我的split.bat代码: setlocal enableextensions enabledelaye

我在一个测试文件中循环,分解查询文本。我想基于工作负载值创建子目录,但我的内部for循环没有提取令牌值

我无法找出该变量的格式有什么问题,我只是得到以下错误:

以下是批处理文件调用:

split.bat UTF_Extract_Queries_UTF_Customer_Benchmark_Monday.btq QueryId UTF_Customer_Benchmark_Monday
这是我的split.bat代码:

setlocal enableextensions enabledelayedexpansion

set "file=%1"
set "firstline=%2"
set "dir=SQL_%3"

set /a cnt=0

rem ----------------------------------------
rem  create directory if not exists
rem ----------------------------------------

if exist %dir% rmdir %dir% /S /Q
if not exist %dir% mkdir %dir%


rem ----------------------------------------
rem  loop through file splitting 
rem ----------------------------------------


for /F "tokens=*" %%A in (%file%) do (

    set "line=%%A"
    set "firstline=%firstline%"

    if "!line:%firstline%=!"=="!line!" (

        rem echo .... firstline not found

    ) else (

        set /a cnt+=1

        echo .
        echo line: [!line!]

        **for /F "tokens=13 delims= " %%v in (!line!) do set "workload=%%v"**
rem        for /F "tokens=19 delims= " %%v in (!line!) do set "queryid=%%v"

        echo [%workload%]

        if not exist %dir%/%workload% mkdir %dir%/%workload%

rem        echo Extracting to File: %dir%/%workload%/Query_!cnt!.sql
    )

rem    echo %%A >> %dir%/%workload%/Query_!cnt!.sql

)

endlocal
下面是一些示例输入文件数据:

/*  UTF_Benchmark UTF_Customer_Benchmark_Monday  Queue Queue_[3.Timeshare_3.Medium]_[CTW-M]_[AIC3BATCH]  TimeStamp 2021-04-19 09:18:52  Workload CTW-M  User AIC3BATCH  QueryId 307075449689919214  */

DATABASE "AIC3"
;

/*  UTF_Benchmark UTF_Customer_Benchmark_Monday  Queue Queue_[3.Timeshare_3.Medium]_[CTW-M]_[TVIAPP]  TimeStamp 2021-04-19 09:19:39  Workload CTW-M  User TVIAPP  QueryId 307175449689987605  */

DATABASE "TVI"
;

/*  UTF_Benchmark UTF_Customer_Benchmark_Monday  Queue Queue_[3.Timeshare_2.High]_[EDW-H]_[DMSOURCEUSER_1]  TimeStamp 2021-04-19 09:14:18  Workload EDW-H  User DMSOURCEUSER_1  QueryId 307165449690098952  */

SET QUERY_BAND = 'ClientLoadSessions=4;' UPDATE FOR SESSION;
;

dos批处理?你对此100%肯定吗?:)无论如何,我需要查看您正在阅读的
文件
,但除了大量其他问题外,如果“!line:%firstline%=!”=“!line!”,这将不会像您所想的那样起作用。我还试图理解为什么要将在循环外部设置的变量设置为循环内部的变量<代码>设置“firstline=%firstline%”但在我看到您正在读取的文件之前,我无法提供帮助。大部分代码我是从另一篇文章中提取的,因此基本上与此相同,只是我尝试提取文件目录的值。谢谢你的编辑,这里的新手,所以第一篇博文,我认为你所说的工作负载值应该是
CTW-M
,如果是这样的话,你所要做的就是根据这个名称创建子曲面吗?是的,没错。根据工作负载将sql分为子目录是针对文件中的所有工作负载id,还是仅针对您搜索的工作负载id?
/*  UTF_Benchmark UTF_Customer_Benchmark_Monday  Queue Queue_[3.Timeshare_3.Medium]_[CTW-M]_[AIC3BATCH]  TimeStamp 2021-04-19 09:18:52  Workload CTW-M  User AIC3BATCH  QueryId 307075449689919214  */

DATABASE "AIC3"
;

/*  UTF_Benchmark UTF_Customer_Benchmark_Monday  Queue Queue_[3.Timeshare_3.Medium]_[CTW-M]_[TVIAPP]  TimeStamp 2021-04-19 09:19:39  Workload CTW-M  User TVIAPP  QueryId 307175449689987605  */

DATABASE "TVI"
;

/*  UTF_Benchmark UTF_Customer_Benchmark_Monday  Queue Queue_[3.Timeshare_2.High]_[EDW-H]_[DMSOURCEUSER_1]  TimeStamp 2021-04-19 09:14:18  Workload EDW-H  User DMSOURCEUSER_1  QueryId 307165449690098952  */

SET QUERY_BAND = 'ClientLoadSessions=4;' UPDATE FOR SESSION;
;