2017-04-24 2 views
2

Als Teil eines Projekts muss ich Text mithilfe von Batch-Scripting in die Mitte vieler Dateien einfügen. Ich bin in der Lage, den Text erfolgreich hinzuzufügen, aber nach dem Kopieren der Dateien an einen neuen Speicherort habe ich festgestellt, dass die HTML-Tags fehlen. Ich habe nur dieses Problem in Windows Server 2012/2008; In Windows 7 bleiben die HTML-Tags intakt.Windows-Batchskript: Dateien mit HTML-Tags können nicht in eine andere Datei kopiert werden

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" 
) 

Unten ist meine Beispieleingabedatei ...

**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>

Nach meinem Skript in Server 2012 ausgeführt wird Ich bin in der Lage, erfolgreich den gewünschten Text in der Mitte zu injizieren, aber Wie gesagt, die HTML-Tags fehlen:

**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>

Wie gesagt, ich kann die gewünschte Ausgabe erzeugen, indem ich den Text in der Mitte in Windows 8 mit dem gleichen Skript hinzufüge. Ich bin nicht in der Lage zu erkennen, warum es unterschiedlichen Ausgang geben (HTML-Tags fehlen) in Windows Server 2012

+0

Hallo kann mir jemand helfen, mit diesem ... – ram

Antwort

0

Es in ursprünglicher Quellcode einige Syntaxfehler war (! in "!var:~0,10", zusätzlichen d in enableDdelayedexpansion fehlen), aber ich sehe keinen Grund dafür, dass dies 2012/2008 nicht funktioniert.

mit

@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" 
    ) 

Hinweis Versuchen Sie, dass die if "!var:~0,10!" == "x-globalre" ( Linie das Vorhandensein von Leerzeichen am Anfang der Zeile nicht Rechnung trägt (die gleiche ursprünglichen Code der Fall ist).

+0

Dank MC ND ..... Hinzufügen setlocal EnableExtensions disabledelayedexpansion hatte den Trick Dank für Ihre wertvollen getan Vorschlag – ram

1

neu geschrieben leicht Erklärung meist in rem Kommentare:

@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

Danke Josefz es war sehr hilfreich ... und es hat wie geplant funktioniert .... – ram

Verwandte Themen