Windows 对于批处理脚本来说,这个for循环到底是做什么的
我有一个batch脚本,我正在努力理解它,因为我是批处理编程新手,必须自定义此代码。但我不明白子程序检查、创建、释放、删除的实际操作是什么。有人能帮忙吗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
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文件(可能没有更改)