zbyszek
Goto Top

Mehrere Dateien miteinander Verknüpfen

Hallo zusammen!

ich habe keinen Plan wie ich es machen soll und wie ihr es gleich merken werden keine Ahnung von den ganzen Zeugs hier.

In einem Verzeichnis liegen Dateien : Uberschrift_1.txt ....Uberschirft_5.txt
Im gleichem Verzeichis liegen auch Daten-Dateien: Daten1.txt ......usw.

Jetzt soll Daten1 mit Uberschrift1 zu ---> Fertige_Daten1.txt kopiert werden.
Daten2.txt mit Uberschirft2.txt. zu Fertige_Daten2.txt
usw.

Das eine ist schon klar:

Copy Uberschrift1.txt + Daten1.txt Fertige_Daten1.txt

Ich glaube ich muss als erstes den Überschriften-Dateien jeweils eine Variable zuordnen. Das geiche mit den Datendateien.
Dann irgendwie ins copy befehl packen.

for /f %%i in ('dir /b U*.txt') do set bla=%~ni
for /f %%j in ('dir /b D*.txt') do set bla2=%~ni

oder irgendwie verschachteln ?????????????

for /f %%i in ('dir /b U*.txt') do (for /f %%j in ('dir /b D*.txt') do set bla=%~ni )


????????
Danke

Content-Key: 171716

Url: https://administrator.de/contentid/171716

Printed on: April 19, 2024 at 10:04 o'clock

Member: Skyemugen
Skyemugen Aug 18, 2011 at 12:32:25 (UTC)
Goto Top
Aloha,

sollte doch so funktionieren:
@echo off & setlocal
set "Pfad=E:\Test"  
pushd "%Pfad%"  
for /f "tokens=1,2 delims=_" %%s in ('dir /b Uberschrift_*.txt') do (  
REM	>>"%%s_%%t" echo( & REM hiermit könntest du noch eine Leerzeile dazwischen setzen  
	copy "%%s_%%t" + "Daten_%%t" "Fertige_Daten_%%t">nul  
	)
popd
pause
goto :eof

Wenn du Zeile 5 in Anspruch nehmen willst, musst du einfach das erste REM entfernen.

greetz André
Member: zbyszek
zbyszek Aug 18, 2011 at 13:08:39 (UTC)
Goto Top
Cool, Danke schon mal dafür.

Wie mache ich das wenn da kein "Trennzeichen" ( delims=_ ) in den Dateinamen steht? dh uberschrift1 uberschrift2 oder Daten1 Daten2 usw?
und die Namen folgend aussehen

Uberschrift1 ---Daten1----> Fertige_Daten1.txt
Uberschrift1a ---Daten1a----> Fertige_Daten1a.txt
Uberschrift2---Daten2----> Fertige_Daten2.txt
Uberschrift2a ---Daten2a----> Fertige_Daten2a.txt

Danke nochmals
Member: Skyemugen
Skyemugen Aug 18, 2011 at 13:39:19 (UTC)
Goto Top
Aloha,

hmkay, dann eben so:

@echo off & setlocal
set "Pfad=E:\Test"  
set "grp=Uberschrift"  
pushd "%Pfad%"  
for /f "delims=" %%s in ('dir /b %grp%*.txt') do call :Ablauf "%%s"  
popd
pause
exit /b

:Ablauf
REM	>>"%~1" echo( & REM hiermit könntest du noch eine Leerzeile dazwischen setzen  
	set "Datei=%~1"  
	call set "Zahl=%%Datei:%grp%=%%"  
	copy "%~1" + "Daten%Zahl%" "Fertige_Daten%Zahl%">nul  
goto :eof

greetz André

@bastla (ich weiß, du liest das face-wink) set call_set+=1 ^_^ ich zähle ab sofort diese Vorkommen face-wink
edit so, damit der Zähler auch seine Daseinsberechtigung hat: Jetzt mir einer Variable mehr face-wink
Member: zbyszek
zbyszek Aug 18, 2011 at 14:01:34 (UTC)
Goto Top
OK Danke nochmals.

jetzt noch mal Verständnisfrage:

Mit dem Leerzeichen verstehe ich nicht!!!

und das auch nicht:

set "datei:%~1" ??????? --> Variable namens datei und dann &~1
call set "Zahl=%%Datei:Uberschrift=%%

Was macht der Doppelpunkt da und fehlt da nicht ein " am Ende?
Member: Skyemugen
Skyemugen Aug 18, 2011 at 14:10:00 (UTC)
Goto Top
Aloha,

Leerzeichen = Typo face-wink (korrigiert)

set "Datei=%~1" = Schleifenvariable "%%s" (mit Zollzeichen) wird als Parameter %1 übergeben und ohne überflüssige Zollzeichen als %~1 in die Variable Datei geschrieben

Ja, Zollzeichen hat gefehlt, hätte zwar die Funktion nicht beeinträchtigt aber eine gerade Anzahl ist beim c&p immer sinnvoll face-wink
der Doppelpunkt weist eine Verarbeitung an, in diesem Fall wird der vorkommende Text Uberschrift durch nichts ersetzt (oder auch weggekürzt), um nur 1a.txt zum Beispiel zu erhalten, also nur die Nummerierung + Textendung
es gibt auch andere Verarbeitungen wie z.B. %Datei:~-4% oder andere Variationen davon, die hier aber nicht voll funktionsfähig wären bzw. nicht das gewünschte Ergebnis bringen würden (um das zu verstehen, kannst du am cmd-prompt einfach mit echo %time:~0,1% und dergleichen herumspielen face-wink)

greetz André
Member: zbyszek
zbyszek Aug 18, 2011 at 14:31:16 (UTC)
Goto Top
alter schwede jetzt bin noch mehr verwirrt als vorher. face-smile
gibt's das auch in deutsch? sorry

Nochmal von vorne:

mit

do call :Ablauf "%%s"

wird die Variable %%s an den :Ablauf übergeben. Dann kommt die Variable %%s in die neue Variable "Datei" rein, mit so einem ~1 als Parameter.

d.h. im ersten Durchlauf steht in der Variable Datei "Überschrift ~1.txt"
Dann Call !! wieso nicht einfach set Zahl=....
Member: Skyemugen
Skyemugen Aug 18, 2011 at 14:51:01 (UTC)
Goto Top
Aloha,

der Parameter beinhaltet schon noch sein eigenens %-Zeichen face-wink

Im Prinzip gilt: Datei=%%s, da ich jedoch mehrere (variierende) Treffer habe, mit denen ich arbeiten muss, nutze ich ein Unterprogramm, die Alternative wäre mit der Variablenerweiterung enabledelayedexpansion zu arbeiten, was allerding einige (hier eher nicht) Nebenwirkungen unter manchen Situationen haben kann, darum versuche ich es grundlegend zu vermeiden, sofern es nicht anders geht.

Tja, call, warum call, einfach gesagt: Gewohnheit oder Luxus *gg*, ich habe selbst erst vor Kurzem bei bastla diese Verarbeitung entdeckt und auch wenn man hier in dem Fall tatsächlich einfach set "Zahl=%Datei:Uberschrift=%" nutzen kann, mache ich es gewohnheitsbedingt ebenso mit call um im Fall der Fälle auch dann wieder nicht mit der Variablenerweiterung zu arbeiten (die dann wirklich teilweise hierbei unangenehm werden kann).

Fragen zur Variablenerweiterung stellst du am Besten die Forensuche face-wink Gibt sehr viel ausführlichen Stoff dazu im Batchbereich bei den Anleitungen, Tipps etc. ich bin nämlich selbst noch Halbwissender, der immer wieder was neues lernt *gg* - bastla, Biber und Friemler sind da eher die Experten hier im Forum

greetz André
Member: bastla
bastla Aug 18, 2011 at 15:39:40 (UTC)
Goto Top
Hallo Sky (falls Du keinen Einwand gegen die Abkürzung hast face-wink)!
set call_set+=1 ^_^ ich zähle ab sofort diese Vorkommen face-wink
Eigentlich wäre der Zähler aber erst anzuwerfen, wenn "call set" auch wirklich benötigt wird - also etwa, wenn Du "Uberschrift" in eine Variable packst (wäre ja auch ubersichtlicher face-wink):
set "Entf=Uberschrift"  
...
call set "Zahl=%%Datei:%Entf%=%%"  
Grüße
bastla
Member: Skyemugen
Skyemugen Aug 18, 2011 at 18:01:59 (UTC)
Goto Top
Aloha bastla,

dass es hier nicht unbedingt benötigt wird, habe ich ja auch bereits erklärt face-wink fiel mir aber auch erst während des Erklärens auf, muss ich zugeben

Aber Recht hast du face-wink

greetz André

P.S.: Wenn dann bitte Skye, da der Name nichts mit dem englischsprachigen Himmel zu tun hat face-wink