2017-04-24 41 views
2

作爲項目的一部分,我需要使用批處理腳本將文本添加到許多文件的中間。我能夠成功添加文本,但是在將文件複製到新位置後,我注意到HTML標記丟失了。我在Windows Server 2012/2008中只有這個問題;在Windows 7中,HTML標籤保持不變。Windows批處理腳本:無法將包含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" 
) 

下面是我的樣本輸入文件...

**Sample input eml:** 
 
    Date Mon,20 mar 2017 
 
    From:[email protected] 
 
    To:[email protected] 
 
    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:[email protected] 
 
    To:[email protected] 
 
    Message-ID:<10091223> 
 
    Subject:Symphony 
 
    X-SUBTYPE=RETURES 
 
    x-globalrelay-MsgType: XXXX 
 
    x-StreamType:xxxx 
 
    x-contentstartdate:XXX 
 
    
 
    <Yay1R0QgoH.............. </html>

如上所述,我可以通過在Windows 8中添加相同腳本的文本來生成所需的輸出。我無法確定爲什麼這是給不同的輸出(html標籤缺失)在Windows Server 2012中

+0

嗨誰能幫我這個... – ram

回答

0

有原始源代碼中的一些語法錯誤(缺少"!var:~0,10"!,額外denableDdelayedexpansion),但我在2012/2008年看不到這個原因。

嘗試用

@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" (行不考慮在該行的開始(同您的原始代碼做)的空間存在。

+0

感謝MC ND .....添加SETLOCAL ENABLEEXTENSIONS disabledelayedexpansion做過的伎倆感謝您的寶貴建議 – ram

1

改寫略有下降,說明大部分在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" 
+0

謝謝Josefz這是非常有用的......它的工作原定的.... – ram

相關問題