haberl92
Goto Top

Ersetzen von Zahlenfolgen in Dateien - CMD

Hallo,
ich bräuchte ein wenig Hilfe.
Ich müsste mittels CMD-Batch eine Zahlenfolge in einer XML (bzw. währendessen ist es eine ".error"-Datei) ersetzen.
Bisher habe ich nur die String mit findstr gefunden und bearbeiten können, aber wie kann ich an der Stelle die neue Zahlenfolge einfügen?

Mein bisheriger Code:
@ECHO off
SETLOCAL enabledelayedexpansion

echo falsche IRN eingeben...
set /p IRN=
echo richtige Pruefziffer eingeben...
set /p PZ=

for /f "tokens=1,2,* delims=:" %%a in ('findstr /ilc:"%IRN%" "C:\Temp\PruefzifferBatch\TEST.xml.error"') do set "IRN2=%%c"  
set IRN2=%IRN2:~28,11%
set IRN3=%IRN2%%PZ%

echo ------
echo %IRN3%

pause


Wahrscheinlich ist dies wieder leichter mit Powershell umzusetzen, aber da hab ich noch fast keine Erfahung damit (CMD wär mir lieber, wenn möglich)

Meine Überlegung wäre, wenn es nicht an der gleichen Stelle ersetzt werden kann, dann könnte man den Teil davor und danach in ein Temp-File speichern, genau so wie die Zeile die ersetzt wird und nachher alle zusammenfügen.

Content-Key: 1094386490

Url: https://administrator.de/contentid/1094386490

Printed on: April 25, 2024 at 20:04 o'clock

Member: erikro
erikro Jul 27, 2021 at 15:16:24 (UTC)
Goto Top
Moin,

bitte, bitte, bitte, mach das in Powershell. Das ist wirklich nicht schwer und viel eleganter als dieses Batchgewurschtel. Ich bin krank und schreibe vom Tablet aus. Deshalb habe ich keinen Zugriff auf meine Linksammlung. Aber Google hilft bei dem Problem gut weiter "Powershell XML".

hth

Erik
Member: Haberl92
Haberl92 Jul 27, 2021 at 16:19:09 (UTC)
Goto Top
ein weiteres Problem ist der Dateiname.
Der Name ist immer ein andererer. Das Script soll am besten alle .error-Dateien durchsuchen nach der eingegebenen IRN.
Bei Batch kann ich mit Platzhalter ("?") arbeiten, aber wie ist das bei Powershell
Member: Haberl92
Haberl92 Jul 27, 2021 at 16:27:31 (UTC)
Goto Top
Ich habe hier einen Ausschnitt aus einer XML.
Ich möchte, dass mich das Script nach einer Eingabe fragt.
In dem Fall gebe ich die Nummer "120741591110" ein und er sucht diese in der XML.
Desweiteren soll er nach einer weiteren Eingabe fragen, in diesem Fall gebe ich dann die Nummer "4" ein.
Am Ende soll die letzte Ziffer der ersten Eingabe durch die Ziffer in der zweiten Eingabe ersetzt werden


						<Attributes>
							<Barcode ID="5100" DataType="string">120741591107</Barcode>  
							<Paginator ID="9000">120741591107</Paginator>  
						</Attributes>
						<Images>
							<Image ID="0" Path="AZHscan_4_210726_000055_04226\00159110_0.jpg" Date="2021-07-26" Time="23:52:20" ImgType="3" DPI="200" Height="1648" Width="1154" Size="52403"/>  
							<Image ID="1" Path="AZHscan_4_210726_000055_04226\00159110_1.tif" Date="2021-07-26" Time="23:52:20" ImgType="2" DPI="200" Height="1649" Width="1155" Size="2344"/>  
						</Images>
					</Front>
					<Rear>
						<Attributes>
							<FormReco ID="27" FormType="FormN13R" Confidence="83.85"/>  
						</Attributes>
						<Images>
							<Image ID="2" Path="AZHscan_4_210726_000055_04226\00159110_2.jpg" Date="2021-07-26" Time="23:52:20" ImgType="3" DPI="200" Height="1650" Width="1158" Size="144664"/>  
							<Image ID="3" Path="AZHscan_4_210726_000055_04226\00159110_3.tif" Date="2021-07-26" Time="23:52:20" ImgType="2" DPI="200" Height="1650" Width="1159" Size="21012"/>  
						</Images>
					</Rear>
				</Page>
				<Page ID="154">  
					<Front>
						<Attributes>
							<Paginator ID="9000">120741591110</Paginator>  
						</Attributes>
						<Images>
							<Image ID="0" Path="AZHscan_4_210726_000055_04226\00159111_0.jpg" Date="2021-07-26" Time="23:52:20" ImgType="3" DPI="200" Height="1646" Width="1156" Size="49500"/>  
							<Image ID="1" Path="AZHscan_4_210726_000055_04226\00159111_1.tif" Date="2021-07-26" Time="23:52:20" ImgType="2" DPI="200" Height="1646" Width="1156" Size="2224"/>  
						</Images>
					</Front>
					<Rear>
						<Attributes>
							<FormReco ID="25" FormType="FormN13" Confidence="74.52"/>  
Member: erikro
erikro Jul 27, 2021 at 17:51:42 (UTC)
Goto Top
Zitat von @Haberl92:

ein weiteres Problem ist der Dateiname.
Der Name ist immer ein andererer. Das Script soll am besten alle .error-Dateien durchsuchen nach der eingegebenen IRN.
Bei Batch kann ich mit Platzhalter ("?") arbeiten, aber wie ist das bei Powershell

Da kannst Du mit regulären Ausdrücken arbeiten. Viel besser. Viel flexibler. Und sexy. face-wink

Bei Deinem XML fehlt leider die Hälfte oder mehr. Lies Dir mal verschiedene Seiten durch, die sich mit dem Thema PS und XML beschäftigen. Das ist mehr als sexy. Kurz beschrieben: Du liest ein XML-Dokument als XML-Objekt ein und hast somit über die Objekteigenschaften Zugriff auf jedes einzelne Element des XML. Guck z. B. mal hier (so auf die Schnelle ergoogelt): https://www.windowspro.de/script/xml-powershell-elemente-attribute-ausle .... Dann änderst Du den Wert und schreibst ihn zurück. Alles ist gut.
Member: Haberl92
Haberl92 Jul 27, 2021 at 18:57:16 (UTC)
Goto Top
ich habe folgendes versucht, aber erfolglos.
zumindest konnte ich die Variable schon richtig bearbeiten

$IRN = Read-Host "falsche IRN eingeben"           
$PZ = Read-Host "richtige Prüfziffer"  
$IRN2 = $IRN.Remove(11)
$IRN3 = $IRN2.Insert(11, "$PZ")  
# Write-Host $IRN3
Get-Content"C:\Temp\PruefzifferBatch\*.error"|Foreach-Object{$_.Replace("$IRN","$IRN3")}|Set-Content"C:\Temp\PruefzifferBatch\Gleicher_Name_wie-Ursprung.xml"  


bin ich da schon auf den richtigen Weg?
Und wie schaffe ich es, dass die Zieldatei die Ursprungsdatei ersetzt mit gleichen Namen?
Member: TK1987
TK1987 Jul 28, 2021 updated at 10:43:30 (UTC)
Goto Top
Moin,

Zitat von @Haberl92:
$IRN2 = $IRN.Remove(11)
$IRN3 = $IRN2.Insert(11, "$PZ")  

hier kommst du mit dem replace-Operator und regulären Ausdrücken leichter und sauberer ans Ziel.
$IRN2 = $IRN -replace '.$',$PZ  
Der Punkt steht für "beliebiges Zeichen", das Dollarzeichen für "am Ende der Zeichenkette".
Regex Tutorial
Regex Legende

Get-Content"C:\Temp\PruefzifferBatch\*.error"  
Get-Content gibt nur den Inhalt einer Textdatei wieder. Du musst also in der Foreach-Schleife die einzelnen Dateien abarbeiten.

In deinem Fall wäre es am besten, die Dateien mit Select-String auf die Zeichenkette durchsuchen. So erhälst du auch wirklich nur die Dateien, die die Zeichenkette enthalten.
# $IRN in .error-Dateien suchen
$Result = Select-String -SimpleMatch $IRN -Path "C:\Temp\PruefzifferBatch\*.error" -List  

# Für jede gefundene Datei
Foreach ($File in $Result) {

  # Dateiinhalt einlesen
  $Content = Get-Content $File.Path

  # $IRN durch $IRN2 ersetzen
  $Content = $Content.replace($IRN, $IRN2)

  # Datei speichern
  $Content | Set-Content $File.Path

} # Ende Foreach 

Gruß Thomas
Member: erikro
erikro Jul 28, 2021 at 09:23:24 (UTC)
Goto Top
Moin,

Zitat von @Haberl92:
$IRN = Read-Host "falsche IRN eingeben"           
> $PZ = Read-Host "richtige Prüfziffer"  
> $IRN2 = $IRN.Remove(11)
> $IRN3 = $IRN2.Insert(11, "$PZ")  
> # Write-Host $IRN3
> Get-Content"C:\Temp\PruefzifferBatch\*.error"|Foreach-Object{$_.Replace("$IRN","$IRN3")}|Set-Content"C:\Temp\PruefzifferBatch\Gleicher_Name_wie-Ursprung.xml"  
bin ich da schon auf den richtigen Weg?

IMHO nicht. Ich würde Dir empfehlen, dass mit den XML-Funktionen zu machen und nicht mit blindem Durchsuchen der Datei nach der Ziffernfolge und dem blinden Ersetzen. Ich weiß ja nicht, wie die Namen da so entstehen. Aber ich würde befürchten, dass die Ziffernfolge auch mal zufällig an anderer Stelle z. B. in der Image-ID auftaucht. Die würde beim blinden Ersetzen auch mit geändert und dann ist alles kaputt. face-wink Mit den XML-Funktionen kannst Du sicher sein, dass Du auch wirklich nur Daten des Knoten veränderst, den Du auch wirklich manipulieren willst.

Und wie schaffe ich es, dass die Zieldatei die Ursprungsdatei ersetzt mit gleichen Namen?

Na indem Du am Ende das Ergebnis in die Datei schreibst.

Liebe Grüße

Eriki
Member: Haberl92
Haberl92 Jul 28, 2021 at 09:27:55 (UTC)
Goto Top
Das klingt schon mal gut. Muss ich nachher gleich testen.
Eine Frage noch:
Die Dateien sind vorher als "Dateiname.xml.error" gespeichert. Ist es möglich die Dateien dann ohne ".error" zu speichern, also als "Dateiname.xml" und die Originaldatei dann löschen? (aber nur bei erfolgreichem ersetzen des Strings)

Und wie sieht es aus, wenn in dem Ordner mehrere ".error"-Dateien sind. Nimmt er dann nur die Datei in der der String steht?
Member: erikro
erikro Jul 28, 2021 at 09:43:24 (UTC)
Goto Top
Moin,

Zitat von @Haberl92:

Das klingt schon mal gut. Muss ich nachher gleich testen.
Eine Frage noch:
Die Dateien sind vorher als "Dateiname.xml.error" gespeichert. Ist es möglich die Dateien dann ohne ".error" zu speichern, also als "Dateiname.xml" und die Originaldatei dann löschen? (aber nur bei erfolgreichem ersetzen des Strings)

Und wie sieht es aus, wenn in dem Ordner mehrere ".error"-Dateien sind. Nimmt er dann nur die Datei in der der String steht?

Ein kleiner Codeschnippsel, um Dich auf die richtige Bahn zu setzen:

$errorfiles = get-childitem *.error
foreach ($file in $errorfiles) {

   [xml]$xml = get-content $file
   # Hier das ganze Gewurschtel mit dem Suchen und Ersetzen im XML

}

Noch ein Hinweis zum Speichern ohne .error:
Die PS ist bekanntlich streng objektorientiert. Das macht die Sache gerade bei solchen Aktionen viel einfacher. In der Schleife steht Dir mit $file ein Objekt zur Verfügung, das alle Eigenschaften der Datei enthält. In der Eigenschaft $file.basename steht der Name ohne Extension. In $file.name steht der Name mit Extension. In $file.fullname steht der ganze Pfad auf die Datei. Und in $file.extension steht die Erweiterung nach dem letzten Punkt. Vielleicht noch $file.parent. Das ist das übergeordnete Verzeichnis. Damit solltest Du das hinkriegen, zum Schluss ohne .error zu speichern. face-wink

Liebe Grüße

Erik
Member: erikro
erikro Jul 28, 2021 at 09:45:12 (UTC)
Goto Top
Zitat von @erikro:

Moin,

Zitat von @Haberl92:

Das klingt schon mal gut. Muss ich nachher gleich testen.
Eine Frage noch:
Die Dateien sind vorher als "Dateiname.xml.error" gespeichert. Ist es möglich die Dateien dann ohne ".error" zu speichern, also als "Dateiname.xml" und die Originaldatei dann löschen? (aber nur bei erfolgreichem ersetzen des Strings)

Und wie sieht es aus, wenn in dem Ordner mehrere ".error"-Dateien sind. Nimmt er dann nur die Datei in der der String steht?

Ein kleiner Codeschnippsel, um Dich auf die richtige Bahn zu setzen:

> $errorfiles = get-childitem *.error
> foreach ($file in $errorfiles) {
> 
>    [xml]$xml = get-content $file
>    # Hier das ganze Gewurschtel mit dem Suchen und Ersetzen im XML
> 
> }
> 

Noch ein Hinweis zum Speichern ohne .error:
Die PS ist bekanntlich streng objektorientiert. Das macht die Sache gerade bei solchen Aktionen viel einfacher. In der Schleife steht Dir mit $file ein Objekt zur Verfügung, das alle Eigenschaften der Datei enthält. In der Eigenschaft $file.basename steht der Name ohne Extension. In $file.name steht der Name mit Extension. In $file.fullname steht der ganze Pfad auf die Datei. Und in $file.extension steht die Erweiterung nach dem letzten Punkt. Vielleicht noch $file.parent. Das ist das übergeordnete Verzeichnis. Damit solltest Du das hinkriegen, zum Schluss ohne .error zu speichern. face-wink

<edit>Das [xml] vor der Variablen ist wichtig. Das weißt die PS an, nicht ein Objekt "textdatei", sondern ein Objekt "xml-Dokument" anzulegen.</edit>

Liebe Grüße

Erik
Member: Haberl92
Haberl92 Jul 28, 2021 updated at 19:20:08 (UTC)
Goto Top
Ich habe es bis jetzt so:

$IRN = Read-Host "falsche IRN eingeben"           
$PZ = Read-Host "richtige Prüfziffer"  
$IRN2 = $IRN -replace '.$',$PZ  
Write-Host $IRN2
$Result = Select-String -SimpleMatch $IRN -Path "C:\Temp\PruefzifferBatch\*.error" -List  
Foreach ($File in $Result) {
  $Content = Get-Content $File.Path
  $Content = $Content.replace($IRN, $IRN2)
  $Content | Set-Content $File.Path
} 


Es funktioniert so eigentlich perfekt.
Nun versteh ich das mit dem $File.Path noch nicht.
Wie schaffe ich es, dass es ohne die Endung ".error" gespeichert wird?
Und gibt es einen Befehl, nach Beendigung das Script von vorne startet?(wenn ich mehr Dateien bearbeiten muss)


Dann hätte ich noch ein Problem:
Ich habe die Datei mit der Endung ".xml.error" und noch eine weitere Datei mit gleichen Namen aber nur der Endung ".error". In dieser Datei würden die Werte für die Variablen $IRN und §PZ stehen.
bild 1
Der Inhalt sieht so aus:
Fehler in BelegRefernzNummer 120941414400 : Pruefziffer 0 falsch, richtig wäre 4! BAB: 0117192841

Die 12-stellige Ziffer wär $IRN und die "4" wäre $PZ.

Wäre es möglich die Variablen aus der anderen Datei auslesen zu lassen?
Member: TK1987
TK1987 Jul 29, 2021 updated at 07:51:15 (UTC)
Goto Top
Zitat von @Haberl92:
Es funktioniert so eigentlich perfekt.
Nun versteh ich das mit dem $File.Path noch nicht.
Mit Powershell arbeitet man Objektorieniert, sprich mit Objekten, die verschiedene Eigenschaften besitzen.

Stell dir zum Beispiel ein Adressbuch vor. Jeder einzelne Eintrag in dem Adressbuch hat verschiedene Eigenschaften, wie etwa: Name, Vorname, PLZ, Ort, Straße, Hausnummer, ...
Genauso verhält es sich auch bei Powershell.

In diesem Fall gibt der Befehl Select-String immer Objekte der Klasse MatchInfo zurück. Dieses enthält unter anderem die Eigenschaften:
PathDer Dateipfad, in dem die Zeichenkette vorkommt
FilenameDer Dateiname
LineDie komplette Zeile, in der die gesuchte Zeichenkette vorkommt
LinenumberDie Zeilennummer, in der die Zeichenkette gefunden wurde
es gibt noch ein paar andere, wie du dem Link entnehmen kannst.

Nachdem du also den Select-String Befehl ausgeführt hast, hast du in der Variable $Result Objekte dieser Klasse; und kannst zum Beispiel mit
$Result.Filename
Alle Dateinamen auflisten, in denen die Zeichenkette gefunden wird.

Ebenso kannst du dir die Objekte und ein paar Eigenschaften auch als Tabelle anzeigen lassen:
$Result | Select -Property Linenumer,Filename,Line

in unser Foreach-Schleife bearbeiten wir alle diese Objekte einzeln in der Variable $File. Wenn wir den Inhalt einer Datei laden wollen, brauchen wir den Dateipfad, der in der Path-Eigenschaft steht - daher $File.Path

Noch genauer wird das alles in dem Powershell Leitfaden für Anfänger erläutert.

Wie schaffe ich es, dass es ohne die Endung ".error" gespeichert wird?
# Dateiname neu
$Filename = $File.Filename -replace '\.error$'  

# Datei speichern
$Content | Set-Content $Filename
Beachte jedoch, dass du dann 2 XML-Dateien hast, die alte Fehlerhafte und die korrigierte. Besser wäre daher, die Datei wieder inklusive der .error-Endung abzuspeichern und dann umzubenennen.

Dann hätte ich noch ein Problem:
Ich habe die Datei mit der Endung ".xml.error" und noch eine weitere Datei mit gleichen Namen aber nur der Endung ".error".
[...]
Wäre es möglich die Variablen aus der anderen Datei auslesen zu lassen?
# Quellpfad
$Source = 'C:\Test'  

# Alle .error-Dateien Auflisten (ohne xml)
$Err_Files = Get-ChildItem -Path "$Source\*.error" -Exclude '*.xml.error'  

# Für jede Error-Dateien
Foreach ($File in $Err_Files) {
  
  # Fehlermeldung mit regulären ausdrücken analysieren
  $Fehler = Select-String -Pattern 'BelegRefernzNummer (\d{12}).*?richtig w.re (\d)!' -Path $File  
  
  # IRN und Prüfziffer aus Fehlermeldung lesen
  $IRN = $Fehler.Matches.Groups[1].Value
  $PZ  = $Fehler.Matches.Groups[2].Value
  
  # Neue IRN erstellen
  $IRN_neu = $IRN -replace '.$',$PZ  
  
  # Dateipfad der dazugehörigen .xml.error-Datei
  $Xml_Pfad = '{0}\{1}.xml.error' -f $File.DirectoryName, $File.BaseName  
  
  # Datei lesen
  $Content = Get-Content $Xml_Pfad
  
  # IRN ersetzen
  $Content = $Content -replace "(?<=>)$IRN(?=<)",$IRN_neu  
  
  # Datei speichern
  $Content | Set-Content $Xml_Pfad
  
  # .xml.error-Datei umbenennen in .xml
  Rename-Item -Path $Xml_Pfad -NewName ($Xml_Pfad.Name -replace '\.error$')  
  
} # Ende Foreach

Das Ganze enthält bislang natürlich noch keine Fehlerbehandlung, falls etwa eine Datei oder ein Wert nicht gefunden werden konnten - aber ich dachte mir fürs erste reicht das auch mal.
Member: Haberl92
Haberl92 Jul 29, 2021 updated at 18:45:11 (UTC)
Goto Top
Zitat von @TK1987:

.xml.error-Datei umbenennen in .xml
Rename-Item -Path $Xml_Pfad -NewName ($Xml_Pfad.Name -replace '\.error$')


Das Ganze enthält bislang natürlich noch keine Fehlerbehandlung, falls etwa eine Datei oder ein Wert nicht gefunden werden konnten - aber ich dachte mir fürs erste reicht das auch mal.

Alles bis auf das Umbenennen funktioniert wunderbar.
Beim Umbennen kommt folgende Meldung:

Rename-Item : Das Argument kann nicht an den Parameter "NewName" gebunden werden, da es sich um eine leere Zeichenfolge handelt.
In C:\Temp\PruefzifferBatch\Pruefziffer2.0.ps1:33 Zeichen:40
+ ... me-Item -Path $Xml_Pfad -NewName ($Xml_Pfad.Name -replace '\.error$')

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : InvalidData: (: ) [Rename-Item], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.RenameItemCommand


ist es nicht einfacher, die Endung .error (6 Zeichen) irgendwie weg zu kürzen?

Zur Fehlerbehandlung:
Wäre es möglich prüfen zu lassen, dass er als $PZ eine Zahl zwischen 0 und 9 einliest?
Falls es was anderes sein sollte, dann soll er nichts machen?
Member: TK1987
Solution TK1987 Jul 30, 2021, updated at Aug 02, 2021 at 15:18:44 (UTC)
Goto Top
Zitat von @Haberl92:
Alles bis auf das Umbenennen funktioniert wunderbar.
Mein Fehler, sorry.
Der Pfad in $XML_Path ist eine Zeichenkette und kein FileSystemObject, hat daher auch keine Eigenschaft "Name" - diese einfach weglassen, dann passt es.
Rename-Item -Path $Xml_Pfad -NewName ($Xml_Pfad -replace '\.error$')  

Wäre es möglich prüfen zu lassen, dass er als $PZ eine Zahl zwischen 0 und 9 einliest?
Etwas anderes kann er ohnehin nicht einlesen.
  # Fehlermeldung mit regulären ausdrücken analysieren
  $Fehler = Select-String -Pattern 'BelegRefernzNummer (\d{12}).*?richtig w.re (\d)!' -Path $File  

\d steht für "digit" (also Ziffer) und gilt immer genau für eine Stelle.
Bei der IRN ist {12} eine Mengenangabe, sorgt also dafür, das die IRN immer eine Zahl von exakt 12 Ziffern sein muss.

Falls es was anderes sein sollte, dann soll er nichts machen?
Geht alles. Sinnvoller ist es hier, den Select-String-Befehl vor die Foreach-Schleife zu legen und dann die Ergebnisse mit Foreach zu bearbeiten. So werden Dateien, bei denen die IRN keine 12-stellige Zahl oder die Prüfziffer keine 1-stellige Zahl ist erst gar nicht abgearbeitet.
Darüber hinaus hab ich dir noch eine Fehlerüberprüfung eingebaut, falls die XML-Datei nicht gefunden werden konnte.
# Quellpfad
$Source = 'C:\Test'  

# .error-Dateien mit regulären ausdrücken analysieren
$Result = Select-String -Pattern 'BelegRefernzNummer (\d{12}).*?richtig w.re (\d)!' -Path "$Source\*.error" -Exclude "*.xml.error" -List  

# Für jede Error-Dateien
Foreach ($File in $Result) {
  
  # Versuche, die dazugehörige XML-Datei zu laden
  try { $Xml_Pfad = Get-Item -ErrorAction 'Stop' ($File.Path -replace '(?=\.error$)','.xml') }  
  
  # Falls Versuch fehlschlägt, Warnung augeben und Datei überspringen
  catch {
    Write-host -ForegroundColor 'red' $_.Exception.Message  
    Continue
  }
  
  # IRN und Prüfziffer aus Fehlermeldung lesen
  $IRN = $File.Matches.Groups[1].Value
  $PZ  = $File.Matches.Groups[2].Value
  
  # Neue IRN erstellen
  $IRN_neu = $IRN -replace '.$',$PZ  
  
  # Datei lesen
  $Content = Get-Content $Xml_Pfad.Fullname
  
  # IRN ersetzen
  $Content = $Content -replace "(?<=>)$IRN(?=<)",$IRN_neu  
  
  try {
    # Datei überschreiben
    $Content | Set-Content $Xml_Pfad.Fullname -ErrorAction stop
  
    # ".xml.error"-Datei umbenennen in ".xml" 
    Rename-Item -Path $Xml_Pfad -NewName $Xml_Pfad.BaseName -ErrorAction stop

    # .error-Datei löschen
    Remove-Item -Path $File.Path -ErrorAction stop
  } catch { write-host -ForegroundColor 'red' $_.Exception.Message }  
  
} # Ende Foreach
Member: Haberl92
Haberl92 Jul 30, 2021 at 10:10:45 (UTC)
Goto Top
Vielen Dank.
Werde ich am Montag gleich testen.
Komme bis dahin nicht mehr an dem Rechner mit den Dateien
Member: Haberl92
Haberl92 Aug 02, 2021 at 13:10:30 (UTC)
Goto Top
Das Script funktioniert wunderbar. Vielen Dank
Jetzt nur noch eine Frage:
Kann ich nach erfolgreichen Ersetzen und Umbenennen die ".error"-Datei (nicht die ".xml.error") gleich löschen lassen?
Member: TK1987
TK1987 Aug 02, 2021 at 13:49:01 (UTC)
Goto Top
Zitat von @Haberl92:
Kann ich nach erfolgreichen Ersetzen und Umbenennen die ".error"-Datei (nicht die ".xml.error") gleich löschen lassen?
Kein Problem. Habe es oben noch ergänzt.
Member: Haberl92
Haberl92 Aug 02, 2021 at 15:01:04 (UTC)
Goto Top
es scheint noch, als würde eine geschweifte Klammer fehlen.

Die schließende "}" fehlt im Anweisungsblock oder der Typdefinition.
+ CategoryInfo : ParserError: (face-smile , ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingEndCurlyBrace
Member: TK1987
TK1987 Aug 02, 2021 at 15:19:19 (UTC)
Goto Top
Stimmt, ist korrigiert.
Mitglied: 148656
148656 Aug 02, 2021 at 15:29:44 (UTC)
Goto Top
Zitat von @Haberl92:

es scheint noch, als würde eine geschweifte Klammer fehlen.

Die schließende "}" fehlt im Anweisungsblock oder der Typdefinition.
+ CategoryInfo : ParserError: (face-smile , ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingEndCurlyBrace

Bei allem nötigen Respekt. Aber so eine Klammer selbständig zu setzen, sollte jetzt nicht zum Showstopper werden.
Member: Haberl92
Haberl92 Aug 02, 2021 at 15:58:22 (UTC)
Goto Top
Zitat von @148656:

Zitat von @Haberl92:

es scheint noch, als würde eine geschweifte Klammer fehlen.

Die schließende "}" fehlt im Anweisungsblock oder der Typdefinition.
+ CategoryInfo : ParserError: (face-smile , ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingEndCurlyBrace

Bei allem nötigen Respekt. Aber so eine Klammer selbständig zu setzen, sollte jetzt nicht zum Showstopper werden.


Bei den Klammern in einer Schleife, weiß ich nicht genau, wo die hin gehört. (bin ja Powershell Neuling)
Lieber frag ich nochmal nach, als dass alles schief läuft.
Und wenn später jemand, das gleiche Problem hat und diesen Thread liest, dann ist derjenige froh, wenn alles so läuft, wie es laufen soll
Member: Haberl92
Haberl92 Aug 02, 2021 at 16:04:03 (UTC)
Goto Top
Jetzt funktioniert es perfekt.
Vielen Dank an TK1987 und alle anderen die mir geholfen haben.