Top-Themen

Aktuelle Themen (A bis Z)

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

Per .bat Datei eine Zeile in vorhandene txt Datei einfügen - Teil 2 mit spezieller Anforderung

Mitglied: clash2345

clash2345 (Level 1) - Jetzt verbinden

22.02.2011 um 09:34 Uhr, 3695 Aufrufe, 20 Kommentare

Hallo Forum,

zunächst erstmal einen herzlichen Gruß und hiermit meinen ersten Beitrag ;)

Der erste Beitrag schließt sich gleich mit einer Frage an.

Folgendes muss ich umsetzen.
ich möchte die erste Zeile meiner txt Datei kopieren und umbedannt in die zweite Zeile einfügen.
Statisch habe ich es schon mit deiner Lösung in diesem Thread geschafft. http://www.administrator.de/index.php?con ...
Das wäre dieser Code:

@echo off & setlocal
set "Zusatz=Ausgabe der Zischendatei: W:\T128-VDB\Ordner\Ordner1\b110124.001\ARCHIV\X0001R.JPG"
set "Nach=Ausgabe der Zischendatei: W:\T128-VDB\Ordner\Ordner1\b110124.001\ARCHIV\X0001.DTA"
set "Datei=D:\Textfile.txt"
set "DateiTmp=%temp%\Textfile.tmp"
move "%Datei%" "%DateiTmp%"
for /f "delims=" %%i in (%DateiTmp%) do (
>>"%Datei%" echo %%i
echo %%i|findstr /b "%Nach%">nul && >>"%Datei%" echo %Zusatz%
)

Mein Problem ist allerdings, das das kopieren und einfügen der Zeilen nicht statisch sonder variabel sein muss.
Die erste Zeile meiner txt Datei lautet:
W:\T128-VDB\Ordner\Ordner1\b110124.001\ARCHIV\X0001.DTA
diese String soll kopiert und als
W:\T128-VDB\Ordner\Ordner1\b110124.001\ARCHIV\X0001R.JPG drunter eingefügt werden.

Wie der Name x0001.DAT schon vermuten lässt, ist dies nur eine von vielen. Es gibt also auch eine Datei mit der Endung x0456.DAT in der ersten Zeile. Daraus muss dann x0456R.JPG werden. usw.

Hast Du hierfür eine Idee wie man dies realisieren kann?
Gruß
Clash
Mitglied: bastla
22.02.2011 um 09:46 Uhr
Hallo clash2345!

Das könnte so gehen:
01.
@echo off & setlocal 
02.
set "Ordner=D:\" 
03.
set "Maske=x*.txt" 
04.
 
05.
pushd "%Ordner%" 
06.
for /f "delims=" %%i in ('dir /b /a-d "%Maske%"') do call :ProcessFile "%%i" 
07.
popd 
08.
goto :eof 
09.
 
10.
:ProcessFile 
11.
set /p Zeile1=<%1 
12.
for /f "delims=" %%a in ("%Zeile1%") do set "Zeile2=%%~dpnaR.jpg" 
13.
> "%~n1-neu%~x1" echo %Zeile1% 
14.
>>"%~n1-neu%~x1" echo %Zeile2% 
15.
>>"%~n1-neu%~x1" more +1 %1 
16.
goto :eof
wobei hier zu Testzwecken zunächst jeweils eine Datei "x-neu.dat" erstellt wird. Wenn das Ergebnis zufriedenstellend ist, kann mit
move "%~n1-neu%~x1" %1
- zwischen Zeile 15 und 16 eingefügt - die alte Datei durch die neue Fassung ersetzt werden.

Grüße
bastla

[Edit] Fehlendes Anführungszeichen in Zeile 6 ergänzt und im Gegenzug überzähliges Prozentzeichen in Zeile 12 entfernt [/Edit]
Bitte warten ..
Mitglied: clash2345
22.02.2011 um 10:42 Uhr
Hallo bastla,

vielen Dank für Deine Antwort und deine Mühe!
Leider klappts noch nicht, da ich mich womöglich missverständlich ausgedrückt habe.
Ich habe in meinem Ordner zb. "D:\" eine "X0001.txt" liegen.
In dieser steht in der ersten Zeile "W:\T128-VDB\Ordner\Ordner1\b110124.001\ARCHIV\X0001.DTA"
In die zweite Zeile müsste abgeleitet von der ersten W:\T128-VDB\Ordner\Ordner1\b110124.001\ARCHIV\X0001R.JPG" eingefügt werden.

Die Variable dabei ist x0001. Es wird auch eine txt geben, die zb. x0456.txt heisst. In dieser steht dann in der ersten Zeile ...\X0456.DTA
Hier müsste in der zweiten dann entsprechend X0456R.JPG stehn.

Mit obigen Code von bastla bekomme ich folgende Fehlermeldung: "<" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

Gruß und Dank
Clash
Bitte warten ..
Mitglied: Biber
22.02.2011 um 11:19 Uhr
Moin Clash,

ändert sich das Verhalten des Batches, wenn du statt der Wildcards "x*.dat", die bastla in Zeile 3 angegeben hat, die Dateimaske "x*.dta" angibst?

Grüße
Biber
Bitte warten ..
Mitglied: bastla
22.02.2011 um 11:25 Uhr
Hallo clash2345!

Ich habe noch einen Fehler in Zeile 6 korrigiert und den Typ für die Suchmaske, wenn es denn weder "dat" noch "dta" sein soll, auf "txt" geändert.

Grüße
bastla
Bitte warten ..
Mitglied: clash2345
22.02.2011 um 11:42 Uhr
Das skript läuft nun zwar durch, aber ändert die txt nicht.
Die bat und txt liegen im selben Ordner. D:\

Gruß
Bitte warten ..
Mitglied: pieh-ejdsch
22.02.2011 um 11:49 Uhr
moin clash,

Zitat von bastla:
wobei hier zu Testzwecken zunächst jeweils eine Datei "x-neu.dat" erstellt wird. Wenn das Ergebnis
zufriedenstellend ist, kann mit
move "%~n1-neu%~x1" %1
- zwischen Zeile 15 und 16 eingefügt - die alte Datei durch die neue Fassung ersetzt werden.

Gruß Phil
Bitte warten ..
Mitglied: bastla
22.02.2011 um 11:53 Uhr
@PH
Danke für's Aushelfen ...

Exakter wäre übrigens (schon immer gewesen ): "x.<Typ lt Vorgabe in Batch-Zeile 3>" (ist ja inzwischen ".txt") ...

Grüße
bastla
Bitte warten ..
Mitglied: clash2345
22.02.2011 um 11:56 Uhr
Mein Fehler. Es wird ja eine neue Datei geschrieben. Leider wird jetzt in der zweiten Zeile ein D:\ vorangestellt, was die Datei entscheident verändert.
Denn ich greife aus der Datei festen Zeilen und Spaltenzeichen ab.
Zeile 2 habe ich versucht zu entfernen oder zu ändern. Leider Ohne Erfolg

Die Ausgabe lautet jetzt
W:\T128-VDB\scheck\easy\b110124.001\ARCHIV\X0001.DTA
D:\ W:\T128-VDB\scheck\easy\b110124.001\ARCHIV\X0001R.jpg

Das D:\ wäre zuviel ;)
Bitte warten ..
Mitglied: bastla
22.02.2011 um 12:22 Uhr
Hallo clash2345!

Selbst mit dem überzähligen Prozentzeichen in Zeile 12 (ist oben inzwischen entfernt) kann ich das anhand meines geposteten Batches und einer Testdatei mit dem Inhalt
01.
W:\T128-VDB\scheck\easy\b110124.001\ARCHIV\X0001.DTA 
02.
Zeile2 
03.
Zeile3 
04.
Zeile4
nicht nachvollziehen ...

Wie sieht denn inzwischen der Batch bei Dir aus?

Grüße
bastla
Bitte warten ..
Mitglied: clash2345
22.02.2011 um 12:27 Uhr
Hallo bastla,

in die eingefügte Zeile wird bei mir ein D:\ vorangestellt. (liegt bei mir im root des Laufwerks D:\)
Packe ich bat und txt in C:\ habe ich in der zweiten ein C:\ vorangestellt.

gruß
clash
Bitte warten ..
Mitglied: bastla
22.02.2011 um 12:31 Uhr
Hallo clash2345!

Könntest Du bitte den Stand des Batches bei Dir (unter Verwendung von "Code"-Formatierung) und, falls diese von meinem Beispiel abweichen sollte, die erste Zeile Deiner Testdatei, posten?

Grüße
bastla
Bitte warten ..
Mitglied: clash2345
22.02.2011 um 12:36 Uhr
Hallo basla,

01.
@echo off & setlocal 
02.
set "Maske=x*.txt" 
03.
set "Ordner=D:\" 
04.
pushd "%Ordner%" 
05.
for /f "delims=" %%i in ('dir /b /a-d "%Maske%"') do call :ProcessFile "%%i" 
06.
popd 
07.
goto :eof 
08.
 
09.
:ProcessFile 
10.
 
11.
set /p Zeile1=<%1 
12.
for /f "delims=" %%a in ("%Zeile1%") do set "Zeile2=%%~dpnaR.jpg%" 
13.
> "%~n1-neu%~x1" echo %Zeile1% 
14.
>>"%~n1-neu%~x1" echo %Zeile2% 
15.
>>"%~n1-neu%~x1" more +1 %1 
16.
move "%~n1-neu%~x1" %1 
17.
goto :eof
Ausgabe lautet dann:
01.
Ausgabe der Zischendatei:               W:\T128-VDB\Ordner\Ordner1\b110124.001\ARCHIV\X0001.DTA 
02.
D:\Ausgabe der Zischendatei:               W:\T128-VDB\Ordner\Ordner1\b110124.001\ARCHIV\X0001R.jpg
System windows7 64bit
Bitte warten ..
Mitglied: bastla
22.02.2011 um 12:43 Uhr
Hallo clash2345!

Dass mehr als
W:\T128-VDB\Ordner\Ordner1\b110124.001\ARCHIV\X0001.DTA
in der Zeile 1 steht, ist jetzt aber neu (und das Ergebnis damit nicht überraschend) ...

Wird die Struktur der Zeile immer so bleiben bzw wird da ev einmal "Zwischendatei" stehen? Sind das zwischen "Zischendatei:" und "W:" Leerzeichen oder TAB?

Grüße
bastla
Bitte warten ..
Mitglied: clash2345
22.02.2011 um 12:49 Uhr
Ja, dies wird so bleiben.
Die Textdateien sind output Dateien aus einem Archivsystem. Und stehen fest.
Das Mehr als
01.
W:\T128-VDB\Ordner\Ordner1\b110124.001\ARCHIV\X0001.DTA
bleibt stehen.
Ist dies von Relevanz?

Gruß und Dank
Clash
Bitte warten ..
Mitglied: bastla
22.02.2011 um 12:55 Uhr
Hallo clash2345!
Ist dies von Relevanz?
Teste mal kurz mit dem von mir geposteten Beispiel und frage (Dich) dann nochmal ...

... und dann ersetze die Zeile 12 durch:
for /f "delims=" %%a in ("%Zeile1:~40%") do set "Zeile2=%Zeile1:~,40%%%~dpnaR.jpg"
Es werden so die ersten 40 Zeichen der Zeile 1 unverändert in die Zeile 2 geschrieben und der ab Zeile 41 angegebene Pfad angepasst ...

Grüße
bastla
Bitte warten ..
Mitglied: clash2345
22.02.2011 um 14:43 Uhr
Jeah! Ich danke Dir! Das hatte ich nicht berücksichtigt, da sich leider bei mir der Denkfehler eingeschlichen hat, das man vom ersten bat ausgehen könnte.

01.
set "Zusatz=Ausgabe der Zischendatei: W:\T128-VDB\Ordner\Ordner1\b110124.001\ARCHIV\X0001R.JPG" 
02.
set "Nach=Ausgabe der Zischendatei: W:\T128-VDB\Ordner\Ordner1\b110124.001\ARCHIV\X0001.DTA"
Einen hätte ich leider noch. :D
Ich habe da ja die Datei mit dem Namen X0001.TXT.
Was sich nun im laufe meiner Arbeit ergeben hat, ist das ich abhängig vom Dateinamen in die erste Zeile X0001.JPG und in die zweite Zeile X0001R.JPG schreiben muss.
Also eine leicht andere Variante als die erste lösung, bei der ich dachte so könnte ich es gebrauchen.
Bitte warten ..
Mitglied: bastla
22.02.2011 um 14:50 Uhr
Hallo clash2345!

Ersetze die Zeile 12 durch diese beiden Zeilen:
01.
for /f "delims=" %%a in ("%Zeile1:~40%") do set "Zeile1=%Zeile1:~,40%%%~dpa%~n1.JPG" 
02.
for /f "delims=" %%a in ("%Zeile1:~40%") do set "Zeile2=%Zeile1:~,40%%%~dpnaR.JPG"
Um für weitere Änderungen vorzubauen:
%Zeile1:~,40%
liefert die ersten 40 Zeichen aus der Variablen %Zeile1%,
%Zeile1:~40%
überspringt die ersten 40 Zeichen aus der Variablen %Zeile1% und gibt den Rest (in diesem Fall also den gesuchten Pfad) zurück.

Mit
%%~dpa
wird Laufwerksbuchstabe ("drive") und Pfad ("path") des über die Schleifenvariable "%%a" angesprochenen Pfades verwendet und um
%~n1
den Namensanteil ("name") ohne Typ ("extension") des als Parameter %1 übergebenen Dateinamens sowie den konstanten Wert ".JPG" ergänzt.

Grüße
bastla
Bitte warten ..
Mitglied: clash2345
23.02.2011 um 10:39 Uhr
Hallo bastla,

vielen Dank für deine Hilfe! Nun klappt alles.
Jetzt kann ich mich an meine eigentliche Arbeit machen und damit einen massen Import starten.

Vielen Dank!
Bitte warten ..
Mitglied: clash2345
23.02.2011 um 11:40 Uhr
Eine Frage hätte ich allerdings noch.
Ich hab in meiner txt in der ersten zeile was stehen.
Aus dem Dateinamen X0001.txt muss ich den Namen der Dartei auslesen und in Zeile 1 schreiben:
x0001.JPG. In zeile zwei:
x0001R.JPG

Was vorher Zeile 1 war, soll jetzt automatisch durch die beiden vorangestellten Zeilen in Zeile 3 wandern.
Ich hab mit obiger Anleitung versucht mit den längen der %Zeile1:~,40% und %Zeile1:~40% zu experimentieren,
aber mir ist es nicht so recht gelungen. Bei mir wird oft die 1 Zeile gelöscht und durch x0001.JPG und X0001R.JPG ersetzt.

Gruß
Clash
Bitte warten ..
Mitglied: bastla
23.02.2011 um 15:07 Uhr
Hallo clas2345!

Wenn es also darum geht, an den Anfang der Datei die beschriebenen (sich aus dem Namen der bearbeiteten Datei ergebenden) Zeilen einzufügen und den Rest unverändert zu lassen, sähe das so aus:
01.
@echo off & setlocal 
02.
set "Maske=x*.txt" 
03.
set "Ordner=D:\" 
04.
pushd "%Ordner%" 
05.
for /f "delims=" %%i in ('dir /b /a-d "%Maske%"') do call :ProcessFile "%%i" 
06.
popd 
07.
goto :eof 
08.
 
09.
:ProcessFile 
10.
> "%~n1-neu%~x1" echo %~n1.JPG 
11.
>>"%~n1-neu%~x1" echo %~n1R.JPG 
12.
>>"%~n1-neu%~x1" type %1 
13.
move "%~n1-neu%~x1" %1 
14.
goto :eof
Sollte doch der Dateiname aus der originalen ersten Zeile gefragt sein, würde das ab ":ProcessFile" so aussehen:
01.
:ProcessFile 
02.
for /f "delims=" %%a in ("%Zeile1:~40%") do ( 
03.
    echo %%~na.JPG 
04.
    echo %%~naR.JPG 
05.
)>"%~n1-neu%~x1" 
06.
>>"%~n1-neu%~x1" type %1 
07.
move "%~n1-neu%~x1" %1 
08.
goto :eof
Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Zeile mit Sonderzeichen in txt einfügen

gelöst Frage von FaysaxBatch & Shell1 Kommentar

Hallo miteinander, ich habe folgendes Problem: Ich habe eine xml Datei in eine txt umgewandelt. Nun möchte ich am ...

Batch & Shell

Bat - Schleife aus txt Datei

gelöst Frage von hoffi3dBatch & Shell16 Kommentare

Hallo, ich habe mir ein kleines Sicherungsscript gebastelt, und würde dieses gerne vereinfachen. Im Augenblick habe ich für jeden ...

Batch & Shell

Zeile von einer Bat-Datei in eine andere kopieren

gelöst Frage von Nick.BBatch & Shell6 Kommentare

Ich wollte eine Zeile von einer Bat-Datei in eine andere schreiben, dies habe ich auch mit echo geschafft aber ...

Batch & Shell

Kann man mit einer .txt Datei eine .bat Datei öffnen?

gelöst Frage von HelloWorldBatch & Shell22 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Neue Wissensbeiträge
Vmware
VMware Update für den ESXi 5.5 verfügbar
Information von sabines vor 6 StundenVmware

Nach dem ganzen Hickhack um Update mit Microcode Anpassungen und Rückzug, gibt es nun für den ESXi 5.5 ein ...

CPU, RAM, Mainboards

Meltdown und Spectre: Intel zieht Microcode-Updates für Prozessoren zurück

Information von keine-ahnung vor 10 StundenCPU, RAM, Mainboards5 Kommentare

Moin, extrem lutztig. Nur gut, dass ich noch nicht beim Probanden-Bingo mitgemacht habe :-) LG, Thomas

Router & Routing
PfSense als Addon auf QNAP
Information von magicteddy vor 23 StundenRouter & Routing7 Kommentare

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 1 TagDatenschutz1 Kommentar

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement26 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Server
TEMP-Profile
gelöst Frage von Forseti2003Windows Server21 Kommentare

Guten Morgen, wer kennt sie nicht, die lieben Temporären Benutzerprofile, vorallem immer dann, wenn man sie am wenigsten braucht. ...

Multimedia & Zubehör
Welches Tablet für die Verkäufer?
Frage von Hendrik2586Multimedia & Zubehör15 Kommentare

Guten Morgen meine Lieben, vielleicht könnt ihr mir ja helfen. Es geht um unsere Außendienstmitarbeiter /Verkäufer. Sie sollen demnächst ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...