Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Per Batchdatei Textdateien bearbeiten

Frage Entwicklung Batch & Shell

Mitglied: sl3

sl3 (Level 1) - Jetzt verbinden

15.05.2006, aktualisiert 20.05.2006, 51771 Aufrufe, 20 Kommentare

Über den find- Befehl und das >/>> am Ende von Batch- Befehlen hinausgehende Funktionen zum Bearbeiten von Dateien per Batchdatei

Ich habe folgendes Problem: Ich würde gerne per Batchdatei Dateien bearbeiten. Die Funktionen, die mir da bisher bekannt sind, sind mir zu wenig. Als Beispiel nehme ich die Datei C:\test.txt. Ich kann z. B. echo abc>>C:\test.txt schreiben, dann wird hinten in der Datei abc hingeschrieben. Jedoch hätte ich gerne noch weitere Funktionen. Was ich mir wünschen würde, ist folgendes:
1. Löschen von Teilen der Datei. Wenn also beispielsweise eine Zeile abc xyz stv in der Datei steht, würde ich gerne xyz löschen können. Auch Zeilenumbrüche würde ich gerne löschen können.
2. Die Alles Ersetzen- Funktion.
3. Hinzufügen von Text an beliebigen Stellen, auch mitten in Zeilen, also nicht nur am Ende der Datei, wie es bei Batch- Befehlen mit >>C:\test.txt am Ende möglich ist. Außerdem würde ich gerne Zeilenumbrüche an beliebigen Stellen erstellen können. In diesem Zusammenhang hätte ich gerne eine Suchfunktion. Damit meine ich, wenn in der Datei eine Zeile abc xyz stv steht, dass ich z. B. genau nach dieser Zeile eine weitere Zeile hinzufügen kann, egal, ob abc xyz stv in Zeile 25, 40 oder welcher auch immer steht.
Es wäre jeweils kein Problem, wenn die Veränderungen in der Datei dazu führen würden, dass dafür eine neue Datei erstellt wird, obwohl es aus meiner Sicht besser wäre, wenn die Veränderungen direkt in der Datei gemacht würden. Die Funktionen des find- Befehls sind mir übrigens bekannt, aber meines Wissens sind die 3 Punkte, die mir fehlen, damit nicht möglich.
Es wäre kein Problem, wenn dafür eine externe Software erforderlich ist, mit Bordmitteln geht es meines Wissens sowieso nicht. Die Betriebssysteme, auf denen ich das benutzen will, sind Windows XP Pro und Home. Ich weiß nicht, ob solche Funktionen mit Batchdateien überhaupt möglich sind, aber wenn jemand zu einem der Punkte was weiß, würde ich mich freuen.
Mitglied: Schirrmeister
16.05.2006 um 09:04 Uhr
Das meiste davon würde über extreme Umwege mittels for, findstr und wieder das Umleiten der Ausgabe in die neue Datei.
Das das 10x aufwendiger (und schwerer zu warten) ist, als einfach Perl oder dgl. zu nehmen sollte dir wohl klar sein.
Als Anhaltspunkte will ich dir da nur for, die verzögerte Erweiterung von Umgebungsvariablen und ggf. setlocal/endlocal nennen.
Bitte warten ..
Mitglied: sl3
16.05.2006 um 12:27 Uhr
Danke. Ich habe zwar keine Ahnung von Perl und sonstigen Sachen, aber wenn es derartige Nachteile hat, das per Batchdatei zu machen, dann lasse ich das mal.
Bitte warten ..
Mitglied: gogoflash
18.05.2006 um 02:02 Uhr
Hi,

ersetzen von einzelnen Stellen in Textdateien geht über SED/CAT/TR (alles Unixbefehle die es auch für Windows gibt)

@Schirrmeister: Ja mit den Windows Boardmitteln ist es schon schwierig. Aber mit ein paar nützlichen Tools geht dass schon. Nicht so schnell aufgeben. Wenn man Batchen möchte, geht alles .Frag mal den Batch Biber...


1. Stellen ersetzen:
sed "s/xyz/abc/g" <input.txt>output.txt

Ersetzt xyz gegen abc in der Datei input.txt und gibt das Ergebnis in output.txt aus.

sed "s/xyz/ /g" <input.txt>output.txt

Entfernt den String xyz und ersetzt ihn durch nichts

Zeilenumbrüche entfernen:

cat test.txt | tr -d "\n"

2. Alles ersetzen ??
echo Hallo hier bin ich > output.txt

Ersetzt den Inhalt von output.txt durch Hallo hier bin ich.

Aber das muss Du genauer erläutern.

3. Zeilen einfügen vor oder nach bestimmten Markern:
(Quelle:http://www.tu-harburg.de/rzt/tuinfo/oberflaechen/UNIX_Script/node52.htm ...)

(1) a\ text

Hinter jede gekennzeichnete Zeile wird text eingefügt.

(1) i\ text

Für die Funktion i\ (insert) gilt das gleiche wie für a mit dem Unterschied, daß text vor der gekennzeichneten Zeile eingefügt wird.


Beispiel: sed -f script_file bsp.f > xx
Inhalt von script_file:

/subroutine/ i\
C\
CUnterprogramm*\
C

(Die Befehlszeilen für sed in dem Beispiel werden hier nicht richtig dargestellt. Schau mal beim Link nach.)

Das Kommando bewirkt folgendes:
Die Datei bsp.f ist die Eingabedatei vom sed.
Vor (i) jede Zeile mit dem Textmuster subroutine werden
die obigen drei Kommentarzeilen geschrieben.
Der so veränderte Text wird in die Datei xx geschrieben.


Ein paar Infos:
http://de.wikipedia.org/wiki/Sed_%28Unix%29

SED/CAT/TR Download für Windows:
http://unxutils.sourceforge.net/

Ein paar Einzeiler:
http://sed.sourceforge.net/sed1line_de.html


Zumindest hast Du jetzt eine Anregung wie man den begrenzten Befehlssatz erweitern kann.

Gruß Miguel
Bitte warten ..
Mitglied: Schirrmeister
18.05.2006 um 08:45 Uhr
@gogoflash

Er fragte explizit nach Batch, und so habe ich geantwortet!
Du kannst mir glauben, daß ich das auch mit Perl, C, C#, Java oder sonstwas erledigen kann, auch mit Batch würde ich das hinbekommen, ich sagte lediglich das es sehr aufwendig ist.
Ich bin sicherlich der letzte, der schnell aufgibt.
Bitte warten ..
Mitglied: gogoflash
18.05.2006 um 15:52 Uhr
Hi,

so ganz einfach ist auch nicht mit sed und tr. Da diese den Zeilenumbruch anders interpretieren (eben Linux Tools).

Aber mit etwas liebe, kann man da schon was zusammenbacken.

Sollte ja nur ein Denkanstoss sein.


Gruß Miguel
Bitte warten ..
Mitglied: Biber
18.05.2006 um 16:24 Uhr
Moin, sl3

schirrmeister und gogoflash haben es eigentlich schon erschöpfend behandelt, nur einen Aspekt noch will ich ergänzen.

Mit native Batch "eben mal schnell" spontane Search-and-Replace-Funktionen ausführen - geht, aber ist wirklich zu umständlich und zu aufwändig.
Mit den Skriptsprachen VBSkript/JSkript und natürlich auch KiX lässt sich vieles ergänzen, aber richtig flexibel und benutzerfreundlich wird es nicht so schnell.
Die Situationen, in denen ich dennoch diesen Weg gehen oder zumindest prüfen würde, sind die Massendatenverarbeitung und/oder die regelmäßig anliegende Dateiverarbeitung.

Beispiel:
Wenn ich aus 200 Dateien überall die 7te und die 15te Zeile löschen will und den String "Hans" durch den String "Wurst" ersetzen will

-oder-

Wenn ich täglich aus einer frisch erzeugten Logdatei die "relevanten" Informationen herausfiltere und diesen Extract an eine eigene AlleTage.log dranhänge (oder die Infos in eine Datenbank inserte), dann würde ich schon Batch nehmen. Allerdings auch angereichert mit Change/Replace-Utilities oder ganz auf eine der vielen Freeware-Sed's ausweichen.

Grüße (und danke an alle für diesen schönen Thread)
Biber

P.S.
@Schirrmeister
Ich bin sicherlich der letzte, der schnell aufgibt.
Der vorletzte... ich bin ja auch noch da.
Bitte warten ..
Mitglied: sl3
19.05.2006 um 20:44 Uhr
Zunächst vielen Dank für eure zahlreichen und hilfreichen Antworten. Ich schau mir das mal genauer an. Scheint ja doch nicht so schwierig zu sein, dass es sich nicht lohnen würde, sich da mal ranzuwagen. Auch wenn es nicht direkt klappt, es hört sich so an, als ob man viel lernen kann, wenn man sich das mal genauer ansieht.

Zitat:
2. Alles ersetzen ?
echo Hallo hier bin ich > output.txt

Ersetzt den Inhalt von output.txt durch Hallo hier bin ich.

Aber das muss Du genauer erläutern.

Ja, dass das geht, ist mir schon klar. Aber es geht mir noch um was anderes. Z. B. in Notepad gibt es ja diese Alles Ersetzen- Funktion (Strg+ H). So etwas meine ich. Da kann man als Suchbegriff etwas eintragen, als Begriff zum Ersetzen etwas anderes und auf Alles ersetzen drücken, dann wird der jeweilige Begriff durch den anderen überall in der Datei ersetzt.
Mir geht es nicht um große Mengen an Dateien, sondern um automatische Funktionen zum Bearbeiten einer einzigen Datei.
Mal ein Beispiel: Das Kopieren eines Benutzerprofils unter Windows XP in ein anderes. Das Problem daran ist, dass eine Kopie mit Variablen wie %userprofile% nicht möglich ist, weil man das Benutzerprofil eines gerade angemeldeten Benutzers nicht kopieren und auch nicht überschreiben kann. Das heißt, es wird eine Batchdatei generiert, die den xcopy- Befehl vom einen zum anderen Benutzerprofil enthält. Dazu muss hinter den Befehl xcopy zunächst der Ausgangsordner geschrieben werden, also mit echo xcopy "%userprofile%">Pfad der Batchdatei.bat oder so ähnlich. Glücklicherweise wird bei diesem Befehl %userprofile% in den tatsächlichen Ordner umgewandelt. Anschließend müsste hintendran der Zielordner und die Parameter geschrieben werden. Dazu würde man theoretisch per runas in das andere Benutzerprofil gehen und den Befehl echo "%userprofile%">>Pfad der Batchdatei.bat ausführen. Nur dann ist der in der nächsten Zeile und der Zeilenumbruch müsste entfernt werden. Ausführung der Batchdatei ist kein Problem, dazu müsste man die Batchdatei als Systemdienst einrichten (weiß ich auch, wie das geht), so dass sie ausgeführt wird, wenn beide Benutzer gerade nicht angemeldet sind.
Das Problem ist jetzt nicht schlimm, da ich einen Weg gefunden habe, es zu umgehen (zunächst per xcopy das eine Benutzerprofil in einen vorher festgelegten Ordner kopieren, dann aus diesem Ordner mit einer weiteren Batchdatei weiter in das andere Benutzerprofil), es soll nur als Beispiel dienen.
Bitte warten ..
Mitglied: Biber
19.05.2006 um 22:44 Uhr
Wie oben geschrieben, sl3,
machbar ist alles - nur mit einem passenden Werkzeug geht es halt schneller.

So, wie Du Deine Anforderung skizziert hast (von einem "fixen" Textfile aus geklonte Varianten erstellen), ist es schon prüfenswert, ob sich dafür nicht ein Batch zusammenschroten lässt.
Poste doch mal von der Muster-Vorlage die relevanten Zeilen (oder alles; werden ja keine 300 Zeilen sein) und die Soll-Variante.
Dann lässt sich doch abschätzen, ob das sinnvoller mit Batch oder VBS oder KiX oder whatever zu lösen ist oder ob wir da erst auf eine 128-Bit-Version von Windows warten müssen.

Gruß
Biber
Bitte warten ..
Mitglied: sl3
19.05.2006 um 23:12 Uhr
Ja, die Datei im Ist- Zustand könnte ungefähr so aussehen:
xcopy "C:\Dokumente und Einstellungen\User1"
"C:\Dokumente und Einstellungen\User2" /Parameter
Soll- Zustand:
xcopy "C:\Dokumente und Einstellungen\User1" "C:\Dokumente und Einstellungen\User2" /Parameter
Bitte warten ..
Mitglied: Biber
19.05.2006 um 23:33 Uhr
Na ja,
könnte lösbar sein...

01.
::---snipp KlonVorlage.bat 
02.
@echo off & setlocal 
03.
type vorlage.txt 
04.
echo. 
05.
set /p Zeile1=<vorlage.txt 
06.
for /f "delims=" %%i in ('more +1 vorlage.txt') do set "Zeile2=%%i" 
07.
echo Zeile1 Zeile2 
08.
echo %zeile1% %Zeile2% 
09.
::-snapp KlonVorlage.bat
Output:
01.
Z:\> 
02.
$cmd$klonVorlage.bat 
03.
xcopy "C:\Dokumente und Einstellungen\User1" 
04.
"C:\Dokumente und Einstellungen\User2" /Parameter 
05.
Zeile1 Zeile2 
06.
xcopy "C:\Dokumente und Einstellungen\User1" "C:\Dokumente und Einstellungen\User2" /Parameter
Grüße
Biber
Bitte warten ..
Mitglied: sl3
20.05.2006 um 00:40 Uhr
Vielen Dank, ich habe die Batchdatei verstanden und sie hat funktioniert!
Du bist ein Super- User (bzw. Admin), fachlich höchst kompetent und immer hilfsbereit und nett, ich war ja schon vor meiner Anmeldung öfter in diesem Forum, daher weiß ich das...
Bitte warten ..
Mitglied: BluBb-mADe
01.06.2010 um 12:42 Uhr
Hey,
ich weiß ich schreib hier in einen uralten Thread, aber meist sind doch neue nicht erwünscht ...
Ich habe ein anderes Problem, was sich aber mit fast der gleichen Lösung beheben lassen würde ...
Ich arbeite selber sehr gerne mit Batch aber bei dem FOR verstehe ich das "('more +1 vorlage.txt')"
aus der Zeile:
for /f "delims=" %%i in ('more +1 vorlage.txt') do set "Zeile2=%%i"
nicht.
Was sind diese halben Anführungsstrich, und was ist "more+1 "?
Die Windows CMD Hilfe hat mir dazu nichts sagen können ... (for /?)
Ich würde mich sehr über eine Kurzerklärung oder einen Link freuen ...

Gruß
BluBb_mADe
Bitte warten ..
Mitglied: Biber
01.06.2010 um 13:20 Uhr
Moin BluBb-mADe,

willkommen im Forum.
Zitat von BluBb-mADe:
Hey,
ich weiß ich schreib hier in einen uralten Thread, ..
Mein seliger Onkel Heinz-Dieter war auch nekrophil....
...aber meist sind doch neue nicht erwünscht ...
Öhmm... jetzt rein statistisch oder mehr gefühlt.... oder geraten....?

... bei dem FOR verstehe ich das "('more +1 vorlage.txt')"
aus der Zeile:
for /f "delims=" %%i in ('more +1 vorlage.txt') do set "Zeile2=%%i"
nicht.
Was sind diese halben Anführungsstrich, und was ist "more+1 "?

Dir FOR/F-Anweisung erwartet eine (unformatierte/Plain-Text-)Datei als zu verarbeitenden Input.
Daher kommt ja auch das "/F" im "For /F .... vom neudeutschen Wort "File" (weil da file Zeilen drin sind).

Es muss aber nicht ein existierendes File (aus dem Dateisystem), sondern darf auch die Bildschirmausgabe eines ausgeführten Befehls sein.
Wesentlich ist nur, dass zu dieser -aus Sicht der FOR/F-Anweisung -Einlese-Quelle ein geöffnetes File-Handle existiert.

Steht also innerhalb der Klammer weder
  • (a) ein Dateiname
  • (b) oder ein in doppelten Anführungszeichen vorgegebener Text
  • sondern (c) etwas in einfachen Anführungszeichen

-------> dann wird dieser Fall (c) interpretiert als "alles innerhalb der einfachen Anführungszeichen ist ein von der CMD.exe ausführbarer/aufrufbarer Befehl".

In diesem Fall wird also der Befehl "more +1 vorlage.txt" ausgeführt, gleichbedeutend mit
"Zeige mir seitenweise die Datei vorlage.txt an (aber überspringe die erste Zeile)"
Okay, wenn du es am CMD-Prompt direkt aufrufst und die Datei Vorlage.txt ein paar 100 Zeilen lang ist, dann würde der "more"-Befehl auch nach jeder Bildschirmseite anhalten und auf die Homer-Simpson-Taste warten.
Bei einer Ausgabe an ein offenes Filehandle allerdings ist die Seitenlänge nahe unendlich, "blättern" wird also der "more"-Befehl in einer FOR/F-Anweisung eher selten.

Ein oder zwei andere Beispiele zu FOR/F-Anweisungen findest du auch im Bereich "Batch & Shell".hier im Forum.

Grüße
Biber
Bitte warten ..
Mitglied: BluBb-mADe
01.06.2010 um 13:31 Uhr
aahhhh....
Das "Filehandle" kannte ich gar nicht.
Das eröffnet ja so einige Möglichkeiten!

Auf das mit dem more hätte ich auch eigentlich selber kommen können ...
Vielen dank!
Du hast mir sehr geholfen...
Und dann auch noch soo schnell!

Ich hab bis jetzt hier im Forum nur Beiträge (meist von dir) gefunden, die meine Fragen schon beantwortet haben
und deshalb wurde eine Anmeldung bis jetzt einfach nie nötig ;D ...
Bitte warten ..
Mitglied: DerKaiserFranz
05.09.2014 um 18:07 Uhr
Hallo Biber,

2010 ist lange her, aber ich versuchts mal mit dem alten Thread. Ich habe eine Aufgabe an der ich scheitere. Folgende Situation:

Wir bekommen laufend per ftp Dateien mit der Namenskonvention Sendungsnummer.txt geschickt. Diese sind in der Struktur immer gleich aufgebaut, haben aber unterschliedliche Namen. Innerhalb dieser Dateien steht immer an der gleichen Stelle die Zeichenfolge A00STD. Diese muss ich nach A00ABH umbenennen. Der Dateiname soll sich dabei nicht ändern. Nach der Bearbeitung müssen die Dateien dann in ein andere Verzeichnis verschoben werden. Von dort aus werden sie dann den nachgelagerten System übergeben.

Ich habe den ganzen Tag Codes aus dem Internet durchforstet und versucht, mir die Vorgehendsweisen zu erschließen. Aber leider komme ich wie gesagt nicht weiter. Ich würde das gerne per Batch lösen und kein separates Programm installieren, sonst muss ich mir wieder eine Freigabe der IT holen und ich versteh ja auch, dass die das nicht wollen.

Gibt es hier eine Möglichkeit?
Bitte warten ..
Mitglied: BluBb-mADe
06.09.2014, aktualisiert um 05:00 Uhr
Hey,
ich bin zwar nicht Biber, aber ich kann dir trotz dem sagen dass das Problemlos möglich ist.
Aber ich denke es wäre sinnvoll nächstes mal einen neuen Thread zu erstellen.
So kann ja niemand deine Frage finden.
Es klingt als wäre der einfachste Weg die Textdatei zeilenweise durchzugehen und jede Zeile nach
diesem String zu durchsuchen und dabei neu zu schreiben.

Das hier z.B. sollte pi mal Daumen tun was du dir vorstellst.
Einfach deine txt per drag'n'drop da drauf.

batch code:
01.
@echo off && setlocal enabledelayedexpansion 
02.
for /F "tokens=1* delims=" %%f in ('type "%1"') do ( 
03.
    set "out=%%f" 
04.
    set "out=!out:A00STD=A00ABH!" 
05.
    echo[!out!>>"%~n1.changed.txt" 
06.
07.
::del "%1"
(Vorsicht, das Script entfernt auf Grund der funktionsweise der For-Schleife Leerzeilen. Dafür gibt es sicher ein Workaround, aber mir fällt gerade nix ein.)
Falls du noch Hilfe bei den Zielpfaden/Dateinamen o.ä. sag einfach Bescheid. Vieleicht kann ich ja helfen.
(Auch ein Ersetzen in einer spezifischen Zeile sollte mit geringem Mehraufwand möglich sein.)
Bitte warten ..
Mitglied: DerKaiserFranz
08.09.2014, aktualisiert um 15:18 Uhr
Hi,

super. Das klappt schonmal ganz gut. Um es für meine Kollegen nutzbar zu machen, wären noch ein paar Änderungen hilfreich

1. Der Dateiname sollte erhalten bleiben. Ich habe das jetzt so gelöst, dass der neue Dateiname eine andere Endung bekommt, hier .txt. Am Ende des Scripts benenne ich denn den kompletten Inhalt des Ordners von *.txt nach *.for um. Das ist sicherlich nicht ganz sauber, aber geht erstmal. Wenn du noch eine bessere Lösung hast ... immer gerne.

2. Wichtig wäre mir, dass ich das ganze per geplanten Task aufgrufen kann. Dieser sollte dann die Batch-Datei aufrufen, die dann wiederum im Verzeichnis mit den umzubenennenden Dateien eine nach der anderen abarbeitet.

Zwei Dinge sind mir noch aufgefallen, die ich nicht lösen kann:

3. ich habe natürlich einges herumprobiert und dabei auch Fehler gemacht. Und nach einer nicht erfolgreichen Ausführung geht es beim nächsten mal grundsätzlich nicht. Da sucht er dann die Datei aus dem vorherigen Versuch, die es aber u.U. gar nicht mehr gibt. Benne ich die dann wie gewünscht um, läuft das Script und auch beim nächsten mal wieder. Ist sicherlich nicht all zu hoch zu bewerten, da es nach der Probier-Phase zu keinen Fehlermeldungen mehr kommen sollte. Dennoch ein ungutes Gefühl.

4. sehr seltsam, und das mausert sich zu einem großen Problem, ist, dass das Script lokal und am Terminalserver unterschiedliche Verhalten zeigt. Lokal haut es hin, aber am Temrinalserver verschwindet die Originaldatei OHNE dass es eine neue gibt. Woran kann denn nun das wieder liegen?
* UPDATE: Punkt 4 ist gelöst. Warum auch immer muss ich am TS explizit angeben, wo ich die Datei erstellt haben möchte. Das ist standardmäßig nicht das Verzeichnis, in dem der Batch ausgeführt wird! Mit exakten Pfadangaben funktioniert das aber wieder wie gewohnt. *

So sieht der Code nun aktuell aus:

@echo off && setlocal enabledelayedexpansion
for /F "tokens=1* delims=" %%f in ('type "%1"') do (
set "out=%%f"
set "out=!out:A00STD=A00ABH!"
echo[!out!>>"%~n1.txt"
)
del "%1"
ren "*.txt" "*.178"

Gib'ts zu den Punkten Ideen?
Bitte warten ..
Mitglied: BluBb-mADe
08.09.2014 um 15:26 Uhr
Sollte alles machbar sein.
Was den Terminalserver angeht... da hab ich leider keine Ahnung.
Ich würde mal raten dass es an %~n1 oder an type "%1" liegt... aber wirklich nur geraten.
(Vieleicht sind es auch irgendwelche systeminternen Sicherheitsrichtlinien.)

Noch mal zusammengefasst:
Das Script wird in einem festen Interval ausgeführt,
soll alle txt Dateien in einem bestimmten Ordner korrigieren
und danach in einen anderen bestimmten verschieben.
Richtig?
Bitte warten ..
Mitglied: DerKaiserFranz
08.09.2014 um 19:14 Uhr
Wie gesagt ist das Thema mit dem TS geklärt.

Die Zusammenfassung ist im Grunde richtig. Leicht abgewandelt soll der Ablauf wie folgt sein:

1. Dateien werden per ftp eingelagert
2. Script wird per geplantem Task ausgeführt, z.B. minütlich
3. Das Script arbeitet alle Dateien ab, die in dem Empfangs-Ordner liegen. Im Script würde ich das so hinterlegen, dass die neuen Dateien gleich im Zielordner erzeugt werden, dann spart man sich das verschieben und umbenennen.
4. Die ursprüngliche Datei kann dann gelöscht werden.

Bei 1 und 2 weiß ich, was zu tun ist. Bei 3 und 4 komme ich nicht weiter.
Bitte warten ..
Mitglied: DerKaiserFranz
12.09.2014 um 03:37 Uhr
Jetzt wird's bunt. Bevor wir das mit dem Abarbeiten der Dateien klären, gibt es eine weitere, unerwartete Baustelle. Folgender Ausschnitt aus einer Musterdatei

G0000100340422549926090665 0000050001 usw, usw, usw
G99001O NNJNN178743743980 NI 11316089
H000015047618900 112 50311316089

Ziel ist es jetzt, in der Zeile, die mit H00 beginnt, die Zeichenfolge 503 zu finden. Die nach 503 folgenden 35 Zeichen müssen in die Zwischenablage bzw. eine Variable gespeichert werden. Mit dem Inhalt müssen wir in die Zeile, die mit G00 beginnt gehen. Dort soll dann der Inhalt der Zwischenablage ab Zeichen 7 einkopiert werden. Der alte Wert darf in H00 stehen bleiben, mit dem müssen wir nichts weiter machen. Der obige Datensatz würde dann so aussehen:

G0000111316089 0000050001 usw, usw, usw
G99001O NNJNN178743743980 NI 11316089
H000015047618900 112 50311316089

Leider werden beim Posten die Leerzeichen herausgelöscht. Ich hoffe, dass das dennoch verständlich geschrieben ist.

Ist das auch zu bewerkstelligen?

Lieben Dank vorab.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Windows Server
Große Dateien mit externen Partnern bearbeiten (4)

Frage von Matsushita zum Thema Windows Server ...

Grafik
Notebook zum Fotos bearbeiten (10)

Frage von KodaCH zum Thema Grafik ...

Batch & Shell
gelöst Textdateien TXT in allen Verzeichnissen suchen und zusammenfassen (19)

Frage von chgs2011 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (29)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...