Funktionierendes Batch Script geht an einer bestimmten Datei "kaputt" und funktioniert danach gar nicht mehr (Bug?)
Ich hab ewig gebraucht um herauszufinden was zur Hölle nicht funktioniert und es ist total merkwürdig und abstrus...:
Also ich will per Batch automatisch nach bestimmten Wörtern suchen und durch andere ersetzen und es funktioniert alles ohne Probleme mit diesem Ansatz:
Inhalt suchen und ersetzen:
@echo off & setlocal enabledelayedexpansion
set "Datei=C:\test.txt"
set "Von=SERVER1\Freigabe$"
set "Nach=SERVER2\Freigabe$"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set Line=!Line:%Von%=%Nach%! & echo !Line!>>"%t%"
move /y "%t%" "%Datei%"
Es funktioniert in meinen Tests mit Unterschiedlichen Dateien, Dateinamen, Pfaden und Wörtern.
Wenn ich (um ihm Beispiel des Codes oben zu bleiben) in C: eine Datei erstelle mit Namen test.txt und dann dort ein paar Wörter reinschreibe die ersetzt werden sollen funktioniert alles.
Dann lösche ich die Datei, nehme die Datei die ich eigentlich ändern will (für die ich die ganzen tests mache)
benenne sie GENAU GLEICH in "test.txt" verschiebe sie in den GENAU GLEICHEN Ordner mit dem das Batch die ganze Zeit funktioniert und wende dann das GENAU GLEICHE batch file an,
dann sagt er mir "das System kann die angegebene Datei nicht finden"
So jetzt kommts:
Lösche ich die Datei mit der es nicht funktioniert und schiebe wieder die alte Datei "test.txt", mit der es die ganze Zeit funktioniert hat, wieder an den GLEICHEN Platz wie zuvor sagt er mir IMMER noch
"das System kann die angegebene Datei nicht finden"
Und das obwohl es zuvor immer fehlerfrei klappte
Danach funktioniert das Batch gar nicht mehr egal was ich ändere und mache ich kriege immer den selben Fehler.
Die Datei die ich ändern will hat 9mb text und auch viele verschiedenen Sonderzeichen.
Was kann ich machen?
Also ich will per Batch automatisch nach bestimmten Wörtern suchen und durch andere ersetzen und es funktioniert alles ohne Probleme mit diesem Ansatz:
Inhalt suchen und ersetzen:
@echo off & setlocal enabledelayedexpansion
set "Datei=C:\test.txt"
set "Von=SERVER1\Freigabe$"
set "Nach=SERVER2\Freigabe$"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set Line=!Line:%Von%=%Nach%! & echo !Line!>>"%t%"
move /y "%t%" "%Datei%"
Es funktioniert in meinen Tests mit Unterschiedlichen Dateien, Dateinamen, Pfaden und Wörtern.
Wenn ich (um ihm Beispiel des Codes oben zu bleiben) in C: eine Datei erstelle mit Namen test.txt und dann dort ein paar Wörter reinschreibe die ersetzt werden sollen funktioniert alles.
Dann lösche ich die Datei, nehme die Datei die ich eigentlich ändern will (für die ich die ganzen tests mache)
benenne sie GENAU GLEICH in "test.txt" verschiebe sie in den GENAU GLEICHEN Ordner mit dem das Batch die ganze Zeit funktioniert und wende dann das GENAU GLEICHE batch file an,
dann sagt er mir "das System kann die angegebene Datei nicht finden"
So jetzt kommts:
Lösche ich die Datei mit der es nicht funktioniert und schiebe wieder die alte Datei "test.txt", mit der es die ganze Zeit funktioniert hat, wieder an den GLEICHEN Platz wie zuvor sagt er mir IMMER noch
"das System kann die angegebene Datei nicht finden"
Und das obwohl es zuvor immer fehlerfrei klappte
Danach funktioniert das Batch gar nicht mehr egal was ich ändere und mache ich kriege immer den selben Fehler.
Die Datei die ich ändern will hat 9mb text und auch viele verschiedenen Sonderzeichen.
Was kann ich machen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 275154
Url: https://administrator.de/forum/funktionierendes-batch-script-geht-an-einer-bestimmten-datei-kaputt-und-funktioniert-danach-gar-nicht-mehr-275154.html
Ausgedruckt am: 27.04.2025 um 11:04 Uhr
11 Kommentare
Neuester Kommentar

Die Datei die ich ändern will hat 9mb text und auch viele verschiedenen Sonderzeichen.
Was kann ich machen?
Powershell nehmen Was kann ich machen?
$file = 'c:\test.txt'
(gc $file | Out-string).replace('SERVER1\Freigabe$','SERVER2\Freigabe$') | Set-Content $file

Oh no, das ist POWERSHELL kein BATCH !
In deine Batch kannst du das mit einer einzelnen Zeile so einbauen:
alles andere fliegt aus deiner Batchdatei raus, weil der Code allen anderen von dir ersetzt.
Sollte es noch nicht laufen musst du die ExecutionPolicy freigeben
https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-polic ...
Mehr zur Ausführung von PS Scripten steht hier:
Inhalt von XML-Dateien ändern
Gruß jodel
In deine Batch kannst du das mit einer einzelnen Zeile so einbauen:
powershell -Executionpolicy ByPass -Command "&{$file = 'c:\test.txt' ; (gc -path $file | Out-string).replace('SERVER1\Freigabe$','SERVER2\Freigabe$') | Set-Content -path $file}"
Sollte es noch nicht laufen musst du die ExecutionPolicy freigeben
https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-polic ...
Mehr zur Ausführung von PS Scripten steht hier:
Inhalt von XML-Dateien ändern
Gruß jodel

Zitat von @IMEANI:
Wo in deiner Zeile schreibe ich rein welches Wort durch ein anderes Ersetzt werden soll?
Wo in deiner Zeile schreibe ich rein welches Wort durch ein anderes Ersetzt werden soll?
Öhm die Frage ist jetzt nicht wirklich ernst gemeint ?? Siehst du doch, ich habe genau deine in deiner Batch verwendeten Strings verwendet !
Erster Parameter von replace ist der String welcher gesucht wird und durch den zweiten Parameter ersetzt wird !

Zitat von @IMEANI:
Wenn ich danach deinen Code per Powershell ausführe dann sagt er mir folgendes:
Bild mit dem von dir vorgeschlagenen Code:
http://www.youscreen.de/jvmrbmtn87.jpg
Ok dann hast du noch Powershell 2.0 hab oben den -Path Parameter noch ergänzt...Wenn ich danach deinen Code per Powershell ausführe dann sagt er mir folgendes:
Bild mit dem von dir vorgeschlagenen Code:
http://www.youscreen.de/jvmrbmtn87.jpg

Oh no ... Ich hatte dir geschrieben das du meine Zeile in die Batchdatei einfügen sollst nicht in die Powershell-Konsole, damit du es erst mal einfacher hast ! Das ist Quasi ein kombinierter Befehl der das Ausführen von Powershell-Code direkt in einer Batchdatei oder direkt in der CMD ermöglicht.
Les auch mal meinen letzten geposteten Link...
Les auch mal meinen letzten geposteten Link...

Oder benutze ich das eine um das andere auszuführen?
Genau ..Ist doch halb so wild:
@echo off
powershell -Executionpolicy ByPass -Command "&{$file = 'c:\test.txt' ; (gc -path $file | Out-string).replace('SERVER1\Freigabe$','SERVER2\Freigabe$') | Set-Content -path $file}"
Die Anleitung deines letzten Links beginnt mit: "Zuerst speichert man den Code in einer Textdatei mit der Endung .ps1."
Das kann man auch machen, aber dann muss man natürlich den Vorspann mit powershell.exe -Executionpolicy ...... weglassen und nur den reinen Powershell-Code innerhalb der doppelten Anführungszeichen dort einfügen. Gibt halt mehrere Methoden. Meine ist halt kompakt direkt in eine Batch integrierbar ohne zusätzliches Powershell-File(ps1).Viel Erfolg dann noch
I'm out now
Gruß jodel32