Windows批处理脚本:无法将包含html标记的文件复制到另一个文件

作为项目的一部分,我需要使用批处理脚本将文本添加到许多文件的中间。 我能够成功地添加文本,但将文件复制到新的位置后,我注意到HTML标记丢失。 我在Windows Server 2012/2008中只有这个问题。 在Windows 7中,HTML标签保持不变。

My Code snippet: @echo off set SrcFolder=C:\Users\emlfilessample set DstFolder=C:\Users\output FOR %%f in (%SrcFolder%*.eml) do ( (FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ %%f"`) do ( SETLOCAL EnabledDelayedExpansion set "var=%%a" set "var=!var:*:=!" if "!var:~0,10" == "x-globalre" ( echo X-SUBTYPE=RETURES ) echo(!var! ENDLOCAL )) >> "%DstFolder%\%%~nxf" ) 

以下是我的示例input文件…

  **Sample input eml:** Date Mon,20 mar 2017 From:ALan@vc.com To:Weijie@vc.com Message-ID:<10091223> Subject:Symphony x-globalrelay-MsgType: XXXX x-StreamType:xxxx x-contentstartdate:XXX <html><body> Message ID:sm9atRNTnMA=Yay1R0QgoH.............. </html> 

在Server 2012中执行我的脚本后,我能够成功地在中间注入所需的文本,但正如我所说的HTML标签丢失:

  **Sample input eml:** Date Mon,20 mar 2017 From:ALan@vc.com To:Weijie@vc.com Message-ID:<10091223> Subject:Symphony X-SUBTYPE=RETURES x-globalrelay-MsgType: XXXX x-StreamType:xxxx x-contentstartdate:XXX <Yay1R0QgoH.............. </html> 

如上所述,我可以通过在Windows 8中添加相同脚本的文本来生成所需的输出。 我无法确定它为什么在Windows Server 2012中提供不同的输出(html标记缺失)。

稍作改写,大部分解释在rem注释中:

 @ECHO OFF SETLOCAL EnableExtensions DisableDelayedExpansion set SrcFolder=C:\Users\emlfilessample set DstFolder=C:\Users\output FOR %%f in (%SrcFolder%\*.eml) do ( > "%DstFolder%\%%~nxf" ( FOR /F "tokens=1,* delims=:" %%a in ('findstr /n "^" "%%~f"') do ( rem remove leading spaces from original line if any FOR /F "tokens=*" %%G in ("%%~b") do ( set "var=%%~G" SETLOCAL EnableDelayedExpansion if "!var:~0,10!" == "x-globalre" ( echo X-SUBTYPE=RETURES ) ENDLOCAL ) rem output original line including all ! exclamation marks rem AND all leading spaces if any echo(%%b ) ) ) rem debugging output type "%DstFolder%\*.eml" 

原始源代码中有一些语法错误(在"!var:~0,10" enableDdelayedexpansion "!var:~0,10"缺少! ,在enableDdelayedexpansion添加了d ),但是我没有看到在enableDdelayedexpansion无法使用的原因。

尝试

 @echo off setlocal enableextensions disabledelayedexpansion set "SrcFolder=C:\Users\emlfilessample" set "DstFolder=C:\Users\output" for %%f in ("%SrcFolder%\*.eml") do ( ( FOR /F "delims=" %%a in ('findstr /n "^" "%%~ff"') do ( set "var=%%a" setlocal EnableDelayedExpansion set "var=!var:*:=!" if "!var:~0,10!" == "x-globalre" ( echo X-SUBTYPE=RETURES ) echo(!var! endlocal ) ) > "%DstFolder%\%%~nxf" ) 

注意, if "!var:~0,10!" == "x-globalre" ( if "!var:~0,10!" == "x-globalre" (行不考虑行首的空格(与原来的代码一样)。