Jump to content

Batch Textverarbeitung


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Guten Morgen,

 

Ich habe beide Varianten ausprobiert.

 

Zu Powershell:

 

Ich verstehe nicht wo in diesem Code der <tag> ausgewählt wird und in eine Datei geschrieben wird zudem erstellt keine Dateien...

Der Name der Zieldateien ist erstmal egal.

 

Hier mein Code:

# Variablen
 
$src = 'C:\Inhalt.xml'
$dst = 'C:\'
 
# In Xml konvertieren, welches die Powershell versteht:
$xml = '<file>'
$xml += Get-Content $src
$xml += '</file>'
$xml = [xml]$xml
 
# Aufteilen und exportieren
$xml.file.tag | % {
    $filename = $_.Name.replace('Tag','Ziel')
    $value = $_.OuterXml
    Set-Content -Value $value -Path "$dst\$filename.xml"
}

 

 

zu Batch:

 

 

 

Sieht nicht schlecht aus,aber wie schreibe ich die gefunden tags nun in verschiedene Dateien?

Was bedeutet "token=1 delims=<>"

 

hier die Ausgabe im CMD:


C:\>for /F "tokens=1 delims=<>" %i in (C
"

C:\>echo Tag name = "Tag1"  | findstr "T
Tag name = "Tag1"

C:\>echo Modul name= "Modul1"  | findstr

C:\>echo Data name= "Data1"  | findstr "

C:\>echo /Modul  | findstr "Tag"

C:\>echo /Tag  | findstr "Tag"
/Tag

C:\>echo Tag name = "Tag2"  | findstr "T
Tag name = "Tag2"

C:\>echo Modul name= "Modul2"  | findstr

C:\>echo Data name= "Data2"  | findstr "

C:\>echo /Modul  | findstr "Tag"

C:\>echo /Tag  | findstr "Tag"
/Tag

C:\>echo Tag name = "Tag3"  | findstr "T
Tag name = "Tag3"

C:\>echo Modul name= "Modul3"  | findstr

C:\>echo Data name= "Data3"  | findstr "

C:\>echo /Modul  | findstr "Tag"

C:\>echo /Tag  | findstr "Tag"
/Tag

C:\>pause
Drücken Sie eine beliebige Taste . . .
bearbeitet von tylerdurden666
Link zu diesem Kommentar

Hast du das Script gespeichert und wolltest es ausführen und es kam ein Fehler wegen Execution Policy? Wenn ja, dann gib "Set-Executionpolicy RemoteSigned" in der Powershell ein.

 

Guten Morgen,

 

Ich habe beide Varianten ausprobiert.

 

Zu Powershell:

 

Ich verstehe nicht wo in diesem Code der <tag> ausgewählt wird und in eine Datei geschrieben wird zudem erstellt keine Dateien...

Der Name der Zieldateien ist erstmal egal.

 

 

Was kommt bei folgendem Heraus (Die Ausgabe für ein Dateien kommt dann als Text in der Powershell Konsole und wird nicht direkt geschrieben)?

$src = 'C:\Inhalt.xml'
$dst = 'C:\'
 
# In Xml konvertieren, welches die Powershell versteht:
$xml = '<file>'
$xml += Get-Content $src
$xml += '</file>'
$xml = [xml]$xml
 
# Aufteilen und exportieren
$xml.file.tag | % {
    $filename = $_.Name.replace('Tag','Ziel')
    $value = $_.OuterXml
    #Set-Content -Value $value -Path "$dst\$filename.xml"
	"Filename: $dst\$filename.xml"
	"Inhalt: $value"
}

Das "Tag" holt er in der Zeile "$xml.file.tag | % {".

Link zu diesem Kommentar

Die Powershell - Console schließt gleich wieder ( wie stoppe ich sie)

 

Ich führe die Datei mit rechtsclick --- mit powershell ausführen   aus.

 

 

Das kommt als Fehlermeldung wenn ich sie in powershell.exe auführe:

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. Alle Rechte vorbehalten.

PS C:\Dokumente und Einstellungen\wolffst12> c:
PS C:\Dokumente und Einstellungen\wolffst12> cd..
PS C:\Dokumente und Einstellungen> cd..
PS C:\> test.ps1
Die Benennung "test.ps1" wurde nicht als Name eines Cmdlet, einer Funktion, ein
er Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Sc
hreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wie
derholen Sie den Vorgang.
Bei Zeile:1 Zeichen:9
+ test.ps1 <<<<
    + CategoryInfo          : ObjectNotFound: (test.ps1:String) [], CommandNot
   FoundException
    + FullyQualifiedErrorId : CommandNotFoundException


Suggestion [3,General]: Der Befehl test.ps1 wurde nicht gefunden. Er ist jedoch
am aktuellen Ort vorhanden. Windows PowerShell lädt Befehle nicht standardmäßig
vom aktuellen Ort. Wenn Sie diesem Befehl vertrauen, geben Sie stattdessen ".\te
st.ps1" ein. Weitere Informationen erhalten Sie unter "get-help about_Command_Pr
ecedence".
PS C:\>
bearbeitet von tylerdurden666
Link zu diesem Kommentar

Okay, nun kommt folgende Meldung:

 

PS C:\> .\test.ps1
Filename: C:\\Ziel1.xml
Inhalt: <Tag name="Tag1"><Modul name="Modul1"><Data name="Data1"></Data></Modul
></Tag>
Filename: C:\\Ziel2.xml
Inhalt: <Tag name="Tag2"><Modul name="Modul2"><Data name="Data2"></Data></Modul
></Tag>
Filename: C:\\Ziel3.xml
Inhalt: <Tag name="Tag3"><Modul name="Modul3"><Data name="Data3"></Data></Modul
></Tag>
PS C:\>
bearbeitet von tylerdurden666
Link zu diesem Kommentar

zu Batch:

 

Sieht nicht schlecht aus,aber wie schreibe ich die gefunden tags nun in verschiedene Dateien?

 

for /f "tokens=2 delims=<>" %%i in (C:\Inhalt.txt) do echo %%i|findstr "Tag" >> c:\ziel.txt

 

Was bedeutet "token=1 delims=<>"

 

Die For-Schleife kann Zeilen in Blöcke, Token aufteilen, die Grenzen der Token werden mit Begrenzungen, Delimeter festgelegt; ein Default-Delimeter ist das Leerzeichen. Das ist alles in der Beschreibung von For erklärt.

 

Was habe ich also gemacht? Ich habe die beiden fehlerverursachenden Steuerzeichen <> als Delimeter bestimmt.

 

Die For-Schleife mit der Textauswertung ist nicht trivial in den Feinheiten und Kombination mit anderen Befehlen. Auch für mich ist das mit den Steuerzeichen für die Tags eine neue Erfahrung.

bearbeitet von lefg
Link zu diesem Kommentar

es wird nichts in die Datei ziel.xml geschrieben.


hier die ausgabe im cmd:


C:\>for /F "tokens=2 delims=<>" %i in (C:\Inhalt.xml) do echo %i  | findstr "Tag
"  1>c:\ziel.xml

C:\>echo /Data  | findstr "Tag"  1>c:\ziel.xml

C:\>echo /Data  | findstr "Tag"  1>c:\ziel.xml

C:\>echo /Data  | findstr "Tag"  1>c:\ziel.xml

C:\>pause
Drücken Sie eine beliebige Taste . . .
bearbeitet von tylerdurden666
Link zu diesem Kommentar

 

Okay, nun kommt folgende Meldung:

 

PS C:\> .\test.ps1
Filename: C:\\Ziel1.xml
Inhalt: <Tag name="Tag1"><Modul name="Modul1"><Data name="Data1"></Data></Modul
></Tag>
Filename: C:\\Ziel2.xml
Inhalt: <Tag name="Tag2"><Modul name="Modul2"><Data name="Data2"></Data></Modul
></Tag>
Filename: C:\\Ziel3.xml
Inhalt: <Tag name="Tag3"><Modul name="Modul3"><Data name="Data3"></Data></Modul
></Tag>
PS C:\>

 

Sieht gut aus. Jetzt kannst du das Orginal nehmen (oder die Zeile mit set-content auskommentieren). Bei $src = kannst du das \ weglassen, das wird immer (siehe "$dst\$filename.xml") hinzugefügt. Dann sollten die Dateien auch geschrieben werden.

Link zu diesem Kommentar

nun kommt diese Fehlermeldung:

 


PS C:\> .\test.ps1
Der Wert "<file><?xml version="1.0" encoding="UTF-8"?> <Tag name = "Tag1"> <Mod
ul name= "Modul1"> <Data name= "Data1"></Data> </Modul> </Tag> <Tag name = "Tag
2"> <Modul name= "Modul2"> <Data name= "Data2"></Data> </Modul> </Tag> <Tag nam
e = "Tag3"> <Modul name= "Modul3"> <Data name= "Data3"></Data> </Modul> </Tag><
/file>" kann nicht in den Typ "System.Xml.XmlDocument" konvertiert werden. Fehl
er: "Unerwartete XML-Deklaration. Die XML-Deklaration muss der erste Knoten im
Dokument sein. Davor sind keine Leerzeichen zulässig. Zeile 1, Position 9."
Bei C:\test.ps1:8 Zeichen:17
+ $xml = [xml]$xml <<<<
    + CategoryInfo          : NotSpecified: (:) [], RuntimeException
    + FullyQualifiedErrorId : RuntimeException

Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen.
Bei C:\test.ps1:12 Zeichen:32
+     $filename = $_.Name.replace <<<< ('Tag','Ziel')
    + CategoryInfo          : InvalidOperation: (replace:String) [], RuntimeEx
   ception
    + FullyQualifiedErrorId : InvokeMethodOnNull

Filename: C:\.xml
Inhalt: <?xml version="1.0" encoding="UTF-8"?>
PS C:\>

hier mein Code:

 

$src = 'C:\Inhalt.xml'
$dst = 'C:'
 
# In Xml konvertieren, welches die Powershell versteht:
$xml = '<file>'
$xml += Get-Content $src
$xml += '</file>'
$xml = [xml]$xml
 
# Aufteilen und exportieren
$xml.file.tag | % {
    $filename = $_.Name.replace('Tag','Ziel')
	$value = '<?xml version="1.0" encoding="UTF-8"?>'
    $value += $_.OuterXml
    Set-Content -Value $value -Path "$dst\$filename.xml"
	"Filename: $dst\$filename.xml"
	"Inhalt: $value"
}

Und es wird nur eine .xml erstellt mit dem Inhalt :

<?xml version="1.0" encoding="UTF-8"?>
bearbeitet von tylerdurden666
Link zu diesem Kommentar

Dann versuche folgendes (wenn es noch eine Leerzeile gibt dann -skip 2):

 

$src = 'C:\Inhalt.xml'
$dst = 'C:'
 
# In Xml konvertieren, welches die Powershell versteht:
$xml = '<file>'
$xml += Get-Content $src | Select-Object -Skip 1
$xml += '</file>'
$xml = [xml]$xml
 
# Aufteilen und exportieren
$xml.file.tag | % {
    $filename = $_.Name.replace('Tag','Ziel')
    $value = '<?xml version="1.0" encoding="UTF-8"?>'
    $value += $_.OuterXml
    Set-Content -Value $value -Path "$dst\$filename.xml"
    "Filename: $dst\$filename.xml"
    "Inhalt: $value"
}

 

bearbeitet von Dukel
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...