Suchen und Ersetzen per Batch (variable Dateinamen, feste Strings)
Hallo allerseits,
nachdem ich schon ziemlich lange am mitlesen bin und immer wieder nützliche Codeschnipsel und Tipps gefunden hab, hab ich heut mal selbst ne Frage... bzw. wahrscheinlich eher nen Anfängerproblem
Problemstellung:
In einer unserer Abteilungen werden NC-Files verarbeitet, die Steuerdaten für entsprechende Maschinen enthalten. Ein solches Steuerkommando ist beispielsweise "M51". Nun benötige ich einen codeschnipsel, der mir im Unterordner /Files in allen Dateien das Steuerkommando "M51" duch "M7" und "M52" duch "M9" ersetzt.
Da ich nicht der absolute Batch-Experte bin, hab ich mir inzwischen aus verschiedenen Quellen Befehle zusammengesucht, außerdem läuft das Ganze über AEdit, sprich ich benötige lediglich die Übergabe der Dateinamen an den Editor - und genau daran scheitert es noch.
Hier mal der Code in seiner momentanen Form, ich hoffe mir kann jemand meinen Fehler zeigen:
[code]
@echo off & setlocal
set "Ordner=Files"
set "Typ=i"
cd /d "%Ordner%"
for %%f in (*.%Typ%) do call :ProcessFile "%%f"
goto :eof
:ProcessFile
echo "%%f"
echo qi "%%f" /rM51M7qe | aedit
echo qi "%%f" /rM52M9qe | aedit
[/code]
greetz
nachdem ich schon ziemlich lange am mitlesen bin und immer wieder nützliche Codeschnipsel und Tipps gefunden hab, hab ich heut mal selbst ne Frage... bzw. wahrscheinlich eher nen Anfängerproblem
Problemstellung:
In einer unserer Abteilungen werden NC-Files verarbeitet, die Steuerdaten für entsprechende Maschinen enthalten. Ein solches Steuerkommando ist beispielsweise "M51". Nun benötige ich einen codeschnipsel, der mir im Unterordner /Files in allen Dateien das Steuerkommando "M51" duch "M7" und "M52" duch "M9" ersetzt.
Da ich nicht der absolute Batch-Experte bin, hab ich mir inzwischen aus verschiedenen Quellen Befehle zusammengesucht, außerdem läuft das Ganze über AEdit, sprich ich benötige lediglich die Übergabe der Dateinamen an den Editor - und genau daran scheitert es noch.
Hier mal der Code in seiner momentanen Form, ich hoffe mir kann jemand meinen Fehler zeigen:
[code]
@echo off & setlocal
set "Ordner=Files"
set "Typ=i"
cd /d "%Ordner%"
for %%f in (*.%Typ%) do call :ProcessFile "%%f"
goto :eof
:ProcessFile
echo "%%f"
echo qi "%%f" /rM51M7qe | aedit
echo qi "%%f" /rM52M9qe | aedit
[/code]
greetz
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 97826
Url: https://administrator.de/contentid/97826
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
5 Kommentare
Neuester Kommentar
Die set-Anweisung für "Ordner" sieht falsch aus...
Versuche mal das ganze mit
set Ordner=Absoluter\Pfad\zu\Ordner\Files
Nur mit "Files" an sich, wird er nicht wisse, wo das Verzeichnis liegt bzw. wird vom Wurzelverzeichnis des Batches ansetzen und sollte das Batch nicht im Verzeichnis liegen, in dem sich "Files" befindet, natürlich selbigen nicht auffinden.
Versuche mal das ganze mit
set Ordner=Absoluter\Pfad\zu\Ordner\Files
Nur mit "Files" an sich, wird er nicht wisse, wo das Verzeichnis liegt bzw. wird vom Wurzelverzeichnis des Batches ansetzen und sollte das Batch nicht im Verzeichnis liegen, in dem sich "Files" befindet, natürlich selbigen nicht auffinden.
Hallo frysee!
Soferne es nicht "aedit" sein muss, könnte folgender Batch genügen:
Bitte zunächst nur auf Testdaten "loslassen", da die Änderung in der jeweiligen Datei ohne Erstellung einer Sicherungskopie erfolgt.
Noch eine Anmerkung: Wie bereits von Wolfsrudel empfohlen, würde auch ich eher einen vollständigen Pfad angeben, also etwa:
Grüße
bastla
Soferne es nicht "aedit" sein muss, könnte folgender Batch genügen:
@echo off & setlocal
set "Ordner=Files"
set "Typ=i"
set R=%temp%\Replace2.vbs
>%R% echo F=WScript.Arguments(0):Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(F).ReadAll
>>%R% echo fso.CreateTextFile(F,True).Write Replace(Replace(T,"M51","M7"),"M52","M9")
for %%f in ("%Ordner%\*.%Typ%") do cscript //nologo %R% "%%f"
Noch eine Anmerkung: Wie bereits von Wolfsrudel empfohlen, würde auch ich eher einen vollständigen Pfad angeben, also etwa:
set "Ordner=D:\NC-Test\Files"
Grüße
bastla