Paramter aus Batch-Datei in Text-Datei schreiben, sobald diese nicht mehr verwendet wird
Hallo zusammen,
ich habe ein kleines Problem und da ich mich leider erst seit sehr kurzem mit dem Scripting von Batch-Dateien beschäftige, benötige ich eure Unterstützung.
Ich habe ein Windows-Programm, welches über Aktionen eine Batch-Datei öffnet und an diese Parameter (Strings) übergibt.
Die Batchdatei schreibt diese Parameter nun in eine Textdatei (zur weiteren Verarbeitung und Abruf durch andere Programme).
Soweit alles gut
Das Windows-Programm führt diese Aktionen aber teilweise so schnell hintereinander aus, dass die Batch die Daten nicht in die Textdatei schreiben kann, da diese Bereits durch die Batch der Vorgängeraktion blockiert wird. So kommen nicht alle Daten in der Textdatei an. (Ich hoffe das war verständlich)
Ich habe mir überlegt das Problem wie folgt zu lösen:
1.) Prüfe, ob Textdatei geöffnet
2.) Wenn ja, dann Warte einen Moment (Ping -n 3 127.0.0.1)
3.) Prüfe erneut
4.) Wenn Datei freigegeben (also nicht geöffnet) dann übertrage die Daten
In die Praxis sieht mein Versuch so aus:
:check
:loop
ping -n 3 127.0.0.1
GoTo Check
:end
echo %Date% %time:~0,8% >> C:\Users\\Desktop\TEST.txt
Pause
Mein Problem ist nun, dass ich die Prüfung, ob die Datei verwendet wird oder nicht, nicht hin bekomme.
Ich hoffe meine Frage ist nicht allzu dämlich!?
Ich würde mich über eine Antwort eurerseits freuen.
Ich bin auch gern für andere Lösungsvorschläge offen (ich hatte mal was von "Command line" gelesen aber das kenne ich nun garnciht).
Im Voraus vielen Dank!!!!
Beste Grüße
Schorsch112
ich habe ein kleines Problem und da ich mich leider erst seit sehr kurzem mit dem Scripting von Batch-Dateien beschäftige, benötige ich eure Unterstützung.
Ich habe ein Windows-Programm, welches über Aktionen eine Batch-Datei öffnet und an diese Parameter (Strings) übergibt.
Die Batchdatei schreibt diese Parameter nun in eine Textdatei (zur weiteren Verarbeitung und Abruf durch andere Programme).
Soweit alles gut
Das Windows-Programm führt diese Aktionen aber teilweise so schnell hintereinander aus, dass die Batch die Daten nicht in die Textdatei schreiben kann, da diese Bereits durch die Batch der Vorgängeraktion blockiert wird. So kommen nicht alle Daten in der Textdatei an. (Ich hoffe das war verständlich)
Ich habe mir überlegt das Problem wie folgt zu lösen:
1.) Prüfe, ob Textdatei geöffnet
2.) Wenn ja, dann Warte einen Moment (Ping -n 3 127.0.0.1)
3.) Prüfe erneut
4.) Wenn Datei freigegeben (also nicht geöffnet) dann übertrage die Daten
In die Praxis sieht mein Versuch so aus:
:check
ping -n 3 127.0.0.1
GoTo Check
:end
echo %Date% %time:~0,8% >> C:\Users\\Desktop\TEST.txt
Pause
Mein Problem ist nun, dass ich die Prüfung, ob die Datei verwendet wird oder nicht, nicht hin bekomme.
Ich hoffe meine Frage ist nicht allzu dämlich!?
Ich würde mich über eine Antwort eurerseits freuen.
Ich bin auch gern für andere Lösungsvorschläge offen (ich hatte mal was von "Command line" gelesen aber das kenne ich nun garnciht).
Im Voraus vielen Dank!!!!
Beste Grüße
Schorsch112
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 274573
Url: https://administrator.de/forum/paramter-aus-batch-datei-in-text-datei-schreiben-sobald-diese-nicht-mehr-verwendet-wird-274573.html
Ausgedruckt am: 27.04.2025 um 20:04 Uhr
5 Kommentare
Neuester Kommentar

Moin Schorsch,
mit Powershell könnte ich dir was vernünftiges anbieten...
Gruß jodel32
mit Powershell könnte ich dir was vernünftiges anbieten...
param(
[string]$parameter1,
[string]$parameter2,
[string]$parameter3
)
# funktion die prüft ob eine Datei durch einen anderen Prozess blockiert ist.
function check([string]$filePath){
try{
$fileStream = (New-Object System.IO.FileInfo $filePath).OpenWrite()
$fileStream.Close(); $fileStream.Dispose()
# file is not locked by another process
return $true
}catch{
# file is locked
return $false
}
}
# Für den Fall das Datei locked ist wiederhole Zugriff alle 0,5 Sekunden
while(!(check 'c:\datei.txt')){
sleep -Milliseconds 500
}
# Als Beispiel Parameter1 in die Textdatei schreiben
$parameter1 | set-content 'c:\datei.txt'

Erstens, deine eingefügte Zeile kommt weg, die ist überflüssig, denn $filePath ist eine Variable die nur in der Function zum Einsatz kommt und diese wird der Funktion ja immer in der Schleife übergeben!:
Du kannst jedoch eine Variable für den Pfad verwenden, dann musst du aber diese auch unten anstatt der festen Pfad eingeben.
Zweitens, wie hast du das Powershell-File aufgerufen, und hast du überhaupt schon mal mit Powershell zu tun gehabt? Und wurde die Executionpolicy schon freigeschaltet ?
Aufgerufen wird das Script so aus einer CMD:
Im Script wird ja als Beispiel nur der erste Parameter in eine Textdatei geschrieben. Das kann man ja dann nach Bedarf und gewünschtem Format anpassen.
Klappt einwandfrei !
Gruß jodel32
[string]$filePath = 'C:\Users\Schorsch\Desktop\PS1Test.txt'
Zweitens, wie hast du das Powershell-File aufgerufen, und hast du überhaupt schon mal mit Powershell zu tun gehabt? Und wurde die Executionpolicy schon freigeschaltet ?
Aufgerufen wird das Script so aus einer CMD:
powershell -ExecutionPolicy Bypass -File "c:\Pfad\deinscript.ps1" "Parameter1"
Im Script wird ja als Beispiel nur der erste Parameter in eine Textdatei geschrieben. Das kann man ja dann nach Bedarf und gewünschtem Format anpassen.
Klappt einwandfrei !
Gruß jodel32

Kennst Du dich den auch mit den Commandline Befehlen aus?
Spezifiziere das, eine "Commandline" ist für mich eine Kommandozeile, was soll das für ein Tool sein ??? noch nie davon gehört.Wenn du mir dazu einen Link hättest kann man dir weiterhelfen !
Kann man hierüber ggf. auch Parameter an eine Anwendung übergeben?
s.o. dazu muss ich erst mal wissen was für ein Tool du überhaupt meinst und was du genau vorhast !