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

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

Frage Entwicklung Batch & Shell

Mitglied: clash2345

clash2345 (Level 1) - Jetzt verbinden

22.02.2011 um 09:34 Uhr, 3637 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
gelöst Sichtbares Ausführen einer BAT-Datei mittels GPOs (10)

Frage von DasWombat1993 zum Thema Windows Server ...

Batch & Shell
Text in neue 1. Zeile in Textdatei einfügen (4)

Frage von FuxxLi zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
RODC über VPN - Verbindung weg (10)

Frage von stefan2k1 zum Thema Windows Server ...