o0julia0o
Goto Top

Batch: suche nach usernameXYusername und ändere XY zu N

hi, kann ich einen Inhalt einer xml-datei per batch verändern?

User soll seinen Namen: N eingeben.

Dann soll in der xml-Datei nach <username>XY</username> gesucht werden. Alles was dazwischen steht, also in dem Fall das XY soll durch N ersetzt werden.

Content-ID: 593357

Url: https://administrator.de/forum/batch-suche-nach-usernamexyusername-und-aendere-xy-zu-n-593357.html

Ausgedruckt am: 23.12.2024 um 03:12 Uhr

145033
Lösung 145033 05.08.2020 aktualisiert um 09:11:10 Uhr
Goto Top
Nimm die Powershell, Batch ist für sowas das schlechteste Mittel der Wahl.
$file = "d:\datei.xml"  
$user = Read-Host "Username eingeben"  
$xml = New-Object XML
$xml.Load($file)
$node = $xml.SelectSingleNode("//username")  
if ($node){
    $node.innerText = $user
    $xml.Save($file)
}else{
    Write-Error -Message "username Knoten nicht gefunden (Namespaces?)!"  
}
o0Julia0o
o0Julia0o 06.08.2020 aktualisiert um 01:16:15 Uhr
Goto Top
Danke sehr. Ich dachte erst Powershell ist schlecht, da dann die System angepasst werden müssten. Powershell ist nicht ausführbar "\Neues Textdokument.ps1" kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere Informationen finden Sie unter "about_Execution_Policies" "

Von daher bin ich auch batch angewiesen, dachte ich. Das funktioniert einwandfrei auf allen Systemen.

Jedoch kann man ein Powershellscript auch zu einer Exe umwandeln, und dann funktioniert das.

Ich verwende jedoch für den Filepath einen Shortcut: "%userprofile%\appdata\locallow\Ordnername mit Space"
Das ist das gleiche wie: "%userprofile%\AppData\LocalLow\Ordnername mit space"

$file = "%userprofile%\appdata\locallow\Ordnername mit Space\datei.xml"  

Doch damit kann Powershell nicht umgehen. Oder wie mache ich das?

So geht das nun face-smile :
$file = "$Env:userprofile\appdata\locallow\Ordnername mit Space\datei.xml"  

Verstehen tue ich es aber nicht. Wo sagst du im Skript dass der nach <username> und vor </username> den neuen Namen einfügen soll? Im Skript steht:
("//username")  

Aber das kommt ja nirgends in der xml-Datei vor!?
145033
Lösung 145033 06.08.2020 aktualisiert um 07:22:22 Uhr
Goto Top
Zitat von @o0Julia0o:

Danke sehr. Ich dachte erst Powershell ist schlecht, da dann die System angepasst werden müssten. Powershell ist nicht ausführbar "\Neues Textdokument.ps1" kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere Informationen finden Sie unter "about_Execution_Policies" "
Sorry, ist Blödsinn
https://www.heise.de/tipps-tricks/Windows-Powershell-Skript-ausfuehren-4 ...
Von daher bin ich auch batch angewiesen, dachte ich. Das funktioniert einwandfrei auf allen Systemen.
Nein.
Jedoch kann man ein Powershellscript auch zu einer Exe umwandeln, und dann funktioniert das.
Nö auch ohne.

Verstehen tue ich es aber nicht. Wo sagst du im Skript dass der nach <username> und vor </username> den neuen Namen einfügen soll? Im Skript steht:
("//username")  

Aber das kommt ja nirgends in der xml-Datei vor!?
Doch, das ist XPath Syntax und bedeutet suche den "Username" Knoten im ganzen XML Tree egal wie tief verschachtelt!!
https://www.w3schools.com/xml/xpath_syntax.asp
Wenn der Knoten gefunden wurde dann wird dessen Inhalt mit der Variablen ersetzt, ganz einfach 😉. So macht man das halt bei XML Dateien, die sollte immer über Parser bearbeitet werden wie oben gezeigt, nicht mit irgendwelchem Batch "String-Gepansche"
o0Julia0o
o0Julia0o 06.08.2020 um 19:18:39 Uhr
Goto Top
Danke Dir.

"Wie kann ich mein Powershell Skript per Doppelklick ausführen?

Klicken Sie mit der rechten Maustaste auf Ihren Desktop und wählen Sie "Neue Verknüpfung" aus.
Geben Sie als Speicherort Folgendes ein:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe -noexit -File "[Dateipfad]\[Skriptname].ps1"
Geben Sie der Verknüpfung dann einen eindeutigen Namen. Wenn Sie nun einen Doppelklick auf die Verknüpfung machen, wird das Skript, das mit dem entsprechenden Skriptnamen im entsprechenden Dateipfad gespeichert ist, automatisch ausgeführt."
Quelle: https://www.heise.de/tipps-tricks/Windows-Powershell-Skript-ausfuehren-4 ...

Aber beine Batch kann ich auch ohne Verknüpfung starten. Das geht bei Powershell nicht. Und eine Verknüpfung hat dann auch hier und da Nachteile.

Aber Powershell scheint viel mächtiger als ne Batch zu sein. Allerdings auch viel komplizierter. Aber das bleibt ja dann nicht aus. Also Powershell kennt einfach den XML-Standard & somit kann man easy auf Befehle zurückgreifen. Heftig. Sowas wäre mit einer Batch viel schwieriger und auch fehleranfälliger.