Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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 对于批处理脚本来说,这个for循环到底是做什么的_Windows_Batch File - Fatal编程技术网

Windows 对于批处理脚本来说,这个for循环到底是做什么的

Windows 对于批处理脚本来说,这个for循环到底是做什么的,windows,batch-file,Windows,Batch File,我有一个batch脚本,我正在努力理解它,因为我是批处理编程新手,必须自定义此代码。但我不明白子程序检查、创建、释放、删除的实际操作是什么。有人能帮忙吗 set /p bom=<.\bom for /f "delims=" %%G in (.\file-list.txt) do ( call:check_utf8_bom %bom% !SOURCE_FOLDER! ) :check_utf8_bom rem

我有一个batch脚本,我正在努力理解它,因为我是批处理编程新手,必须自定义此代码。但我不明白子程序检查、创建、释放、删除的实际操作是什么。有人能帮忙吗

 set /p bom=<.\bom    
    for /f "delims=" %%G in (.\file-list.txt) do (
           call:check_utf8_bom %bom% !SOURCE_FOLDER!
        )

    :check_utf8_bom
        rem ;; Checks If There Is The UTF-8 Bom At The Beginning Of The File
        set /p firstLine=<%2\tmp

        if "%firstLine:~0,3%"=="%~1" call:create_utf8bom_free_file %2
        goto:eof    

:create_utf8bom_free_file
    rem ;; Remove UTF-8 BOM From "tmp" File o Avoid Problems During Interpretation
    type %1\tmp>%1\tmp.bom

    for /f "delims=" %%G in (%1\tmp.bom) do (
        if defined i echo.%%G>>%1\tmp
        if not defined i (
            call:remove_utf8_bom  "%%G" %1
            set i=1
        )
    )
    del %1\tmp.bom
    goto:eof

:remove_utf8_bom
    rem ;; Called From create_utf8bom_free_file Function Create The File Without The BOM In The First line
    set fl=%~1
    echo %fl:~3,-1%%fl:~-1%>"%2\tmp"
    goto:eof    
set/p物料清单=>%1\tmp
如果没有定义,我(
调用:删除\u utf8\u bom“%%G”%1
集合i=1
)
)
删除%1\tmp.bom
后藤:eof
:删除物料清单
rem;;从create_utf8bom_free_file函数调用,创建第一行没有BOM表的文件
设置fl=%~1
回显%fl:~3,-1%%fl:~-1%>%2\tmp
后藤:eof

有人能帮我理解一下吗?

由于您没有发布remove\u utf8\u bom过程,所以不太清楚脚本的作用。到目前为止,我可以告诉您,循环逐行读取文件tmp.bom的内容。在每次迭代中,它检查是否设置了变量i。如果是,则将当前处理的行追加到文件tmp。否则,当前行和参数%1都将传递给过程remove_utf8_bom(我们不知道),变量i将设置为1

正如您所问的,这就是for循环的作用(没有上面和下面的行)。更多信息,我需要更多的代码

编辑:

顺便说一下……即使没有代码,我也认为这个脚本应该从编码的文本文件中删除。这是经常需要的,因为如果批处理或cmd文件存储在UTF-8中,则在其开头有一个BOM,这会导致脚本中的第一行无法执行


要消除此问题,应避免将脚本保存为UTF-8。如果您不能确定编码,您也可以使用
REM启动脚本,不管这里有什么文本
,因为这一行将被忽略。脚本的其余部分将根据需要执行。

由于您没有发布remove\u utf8\u bom过程,因此不清楚脚本的作用。到目前为止,我可以告诉您,循环逐行读取文件tmp.bom的内容。在每次迭代中,它检查是否设置了变量i。如果是,则将当前处理的行追加到文件tmp。否则,当前行和参数%1都将传递给过程remove_utf8_bom(我们不知道),变量i将设置为1

正如您所问的,这就是for循环的作用(没有上面和下面的行)。更多信息,我需要更多的代码

编辑:

顺便说一下……即使没有代码,我也认为这个脚本应该从编码的文本文件中删除。这是经常需要的,因为如果批处理或cmd文件存储在UTF-8中,则在其开头有一个BOM,这会导致脚本中的第一行无法执行


要消除此问题,应避免将脚本保存为UTF-8。如果您不能确定编码,您也可以使用
REM启动脚本,不管这里有什么文本
,因为这一行将被忽略。脚本的其余部分将根据需要执行。

由于您没有发布remove\u utf8\u bom过程,因此不清楚脚本的作用。到目前为止,我可以告诉您,循环逐行读取文件tmp.bom的内容。在每次迭代中,它检查是否设置了变量i。如果是,则将当前处理的行追加到文件tmp。否则,当前行和参数%1都将传递给过程remove_utf8_bom(我们不知道),变量i将设置为1

正如您所问的,这就是for循环的作用(没有上面和下面的行)。更多信息,我需要更多的代码

编辑:

顺便说一下……即使没有代码,我也认为这个脚本应该从编码的文本文件中删除。这是经常需要的,因为如果批处理或cmd文件存储在UTF-8中,则在其开头有一个BOM,这会导致脚本中的第一行无法执行


要消除此问题,应避免将脚本保存为UTF-8。如果您不能确定编码,您也可以使用
REM启动脚本,不管这里有什么文本
,因为这一行将被忽略。脚本的其余部分将根据需要执行。

由于您没有发布remove\u utf8\u bom过程,因此不清楚脚本的作用。到目前为止,我可以告诉您,循环逐行读取文件tmp.bom的内容。在每次迭代中,它检查是否设置了变量i。如果是,则将当前处理的行追加到文件tmp。否则,当前行和参数%1都将传递给过程remove_utf8_bom(我们不知道),变量i将设置为1

正如您所问的,这就是for循环的作用(没有上面和下面的行)。更多信息,我需要更多的代码

编辑:

顺便说一下……即使没有代码,我也认为这个脚本应该从编码的文本文件中删除。这是经常需要的,因为如果批处理或cmd文件存储在UTF-8中,则在其开头有一个BOM,这会导致脚本中的第一行无法执行


要消除此问题,应避免将脚本保存为UTF-8。如果您不能确定编码,您也可以使用
REM启动脚本,不管这里有什么文本
,因为这一行将被忽略。脚本的其余部分将根据需要执行。

%1
表示传递给脚本的第一个参数/
:create_utf8bom_free_file
子例程

类型%1\tmp>%1\tmp.bom
此文件
tmp
%1
目录到
tmp.bom
文件-这应将unicode文件转换为ascii文件(可能没有更改)