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

Bestimmte Dateien suchen und den Dateinamen jeder Zeile darin anhängen

Frage Entwicklung Batch & Shell

Mitglied: atterbiker

atterbiker (Level 1) - Jetzt verbinden

13.03.2011, aktualisiert 18.10.2012, 6174 Aufrufe, 13 Kommentare

Es soll bestimmten Dateien in einem Ordner in jeder enthaltenen Zeile jeweils der Dateinamen in Klammern ohne Extension angehängt werden

Ich benötige ein Skript/Batch/etc. womit ich gewissen Dateien (*.dat) in einem/dem aktuellen Ordner jeder der enthaltenen Zeilen den Dateinamen in Klammern ohne Extension anhängen kann.

Beispiel:

test1.dat
Zeile1
Zeile1
Zeilex

daraus soll werden

test1.dat
Zeile1 (test1)
Zeile2 (test1)
Zeilex (test1)


Dies sollte mit allen *.dat in einem Ordner geschehen.

Vielen Dank für alle Antworten.
Mitglied: mathe172
13.03.2011 um 13:42 Uhr
(Hallo,)

Versuchs mal mit:
01.
(@echo off) & (for /r "C:\Ordner" %%A in (*.dat) do (for /f "usebackq delims=" %%B in ("%%A") do echo.%%B (%%~nA))>"%%A")
[EDIT: Aufgrund eines Fehlers Code NICHT benutzen!]
Achtung, nicht getestet und überschreibt die Dateien einfach.

(Mathe172)
Bitte warten ..
Mitglied: 60730
13.03.2011 um 13:44 Uhr
Auch dir....
  • eine Zeile zum Gruß

  • eine Demozeile für die Dosbox..
for /r laufwerk:\pfad %a in (.suffix) do for /f %b in (%a) do echo %b (%~na)

  • eine Zeile für die Brainbox....
for /?

Den Rest findest du dann alleine raus

Gruß

edit
@ mathe - yupp - obwohl - ohne temp Datei beim einlesen der originaldatei die mit neuem Inhalt zu befüllen - vielleicht kontrabassporoduktiv ist?
Wie gut, das wieder einer ein kompliziertes Script braucht und sofotr zwei dumme gefunden hat, die ihm seinen Grußlosen Wunsch ähnlich erfüllen
btw: nimm das biite raus - allein der eine > in der Schleife gibt Ärger - soll er doch selber herausfinden...

/edit
Bitte warten ..
Mitglied: atterbiker
13.03.2011 um 14:49 Uhr
Zitat von 60730:
Wie gut, das wieder einer ein kompliziertes Script braucht und sofotr zwei dumme gefunden hat, die ihm seinen Grußlosen
Wunsch ähnlich erfüllen

Natürlich will ich nicht unhöflich erscheinen - und sende mal einen schönen Gruß hinterher (bin in letzter Zeit wohl zuviel im Usenet unterwegs).

Leider liegen meine Batch-Zeiten schon zu lange zurück und da hab ich auch nicht sooo komplizierte Dinger verfaßt. Wäre also für eine idiotensichere Antwort sehr dankbar.

Zitat von 60730:
btw: nimm das biite raus - allein der eine > in der Schleife gibt Ärger - soll er doch selber herausfinden...

Das ist schon wieder grob

Aber schonmal herzlichen Dank für die beiden Lösungsansätze, werd ich mal versuchen umzusetzen
Bitte warten ..
Mitglied: mathe172
14.03.2011 um 16:06 Uhr
Hallo atterbiker!

Hier -zwar verspätet- eine Lösung, die bei mir funktioniert hat(@T-Mo diese Version funkt auch mit einem ">" ):
01.
(@echo off) & (for /r "C:\Neuer Ordner" %%A in (*.dat) do (((for /f "usebackq delims=" %%B in ("%%A") do (echo.%%B ^(%%~nA^)))>"%Temp%\%%~nxA") & (move /Y "%Temp%\%%~nxA" "%%~dpA")))
[Edit: Zielpfad der Verschiebung geändert/verbessert]

Mathe172

PS: Nochmal @T-Mo: Wird bei "(for ....)>Datei.txt" nicht zuerst die for-Schleife abgearbeitet und dann die eingabe umgeleitet?
Bitte warten ..
Mitglied: 60730
14.03.2011 um 17:54 Uhr
Moin,

Zitat von atterbiker:
> Zitat von 60730:
> ----
> Wie gut, das wieder einer ein kompliziertes Script braucht und sofotr zwei dumme gefunden hat, die ihm seinen
Grußlosen Wunsch ähnlich erfüllen
    • Wobei sich die beiden "dummen" auch auf "zwei Dumme - ein Gedanke bezieht..."

    Natürlich will ich nicht unhöflich erscheinen - und sende mal einen schönen Gruß hinterher (bin in letzter Zeit wohl zuviel im Usenet unterwegs).
    Danke, dass du den Wink verstanden hast
    Leider liegen meine Batch-Zeiten schon zu lange zurück und da hab ich auch nicht sooo komplizierte Dinger verfaßt.

    Und genau deshalb finde ich persönlich den Mathematischen Ansatz falsch
    Ich behaupte von mir, dass ich Bätcheln kann und dass Mathes Ansatz sogar funktioniert (bedingt durch die Verschachtelten Klammern) und das selbst mir nicht auf den ersten Blick aufgefallen ist - vermute ich, dir ist damit (auch wenn der läuft) nicht wirklich geholfen.
    Wäre also für eine idiotensichere Antwort sehr dankbar.
    Naja- mein Ziel ist es eher - lernwillige Laien nicht wie Idioten da stehen zu lassen, sondern Ihnen an die Hand zu gehen, damit ie selber drauf kommen.

    Aber schonmal herzlichen Dank für die beiden Lösungsansätze, werd ich mal versuchen umzusetzen
    Eben - das ist ein und dergleiche....

    @Mathe:
    PS: Nochmal @T-Mo: Wird bei "(for ....)>Datei.txt" nicht zuerst die for-Schleife abgearbeitet und dann die eingabe umgeleitet?

    Yupp, aber das ist wirklich ein komplexer String, den du da abgefeuert hast und der so auch nur funktioniert, wenn @echo off da ist.
    Am liebsten wäre mir ja - der TO würde mal versuchen, das aufzudröseln, aber das wird er nicht können.
    OK - der Wink mit dem Mathematischen Zaunpfahl und den Klammern - könnte hilfreich sein.

    Gruß
Bitte warten ..
Mitglied: mathe172
14.03.2011 um 18:59 Uhr
Hallo nochmal!

Am liebsten wäre mir ja - der TO würde mal versuchen, das aufzudröseln, aber das wird er nicht können.
Da T-Mo wahrscheinlich recht hat und ich gerade ein bisschen Zeit und Lust , werde ich mal für den TO und alle nachfolgenden Leser versuchen meinen OneLiner zu splitten und zu erklären...
Also:
01.
::Erste und einfachste Version 
02.
@echo off 
03.
for /r "C:\Neuer Ordner" %%A in (*.dat) do ( 
04.
2>nul del "%Temp%\%%~nxA" 
05.
for /f "usebackq delims=" %%B in ("%%A") do ( 
06.
>>"%Temp%\%%~nxA" echo.%%B ^(%%~nA^) 
07.
08.
move /Y "%Temp%\%%~nxA" "%%~dpA" 
09.
)
Erklärung:
Z2: Echo (Ausgabe der Befehle) ausschalten und die Ausgabe des Befehls selbst unterdrücken
siehe T-Mo's (at)echo off oder batch4runaways part 0.0000001
Z3-9: In einer For-Schleife rekursiv(/r) alle Verzeichnisse ausgehend vom Verzeichnis C:\Neuer Ordner, die dem Schema *.dat entsprechen durchackern und die Pfade jeweils in %%A packen
siehe Friemlers Tutorial zur For-Schleife und for /? in der Dos-Box
Z4: Die Datei im Temp-Verzeichnis (%Temp%), die den Namen der Datei in %%A trägt(%%~nxA), löschen und eventuelle Fehlermeldung bei nichtvorhandensein ins Nirvana schicken (Umleiten der Fehlermeldung: "2>"; Ins Nirvana "nul").
Z5-7: In einer For-Schleife jede Zeile (/f) der Datei %%A durchmachen und die Zeile selbst, sowie den Dateinamen ohne Erweiterung (%%~nA) in Klammern in eine temporäre Datei schreiben
usebackq:Ermöglich die Einschliessung des Dateinamens in "", sodass es bei Leerzeichen im Pfad zu keinem Fehler kommt
delims= Kein Trennzeichen definieren, damit die ganze Zeile in einer Variable steht (%%B)
siehe wieder Friemlers Tutorial zur For-Schleife und for /? in der Dos-Box
Z6: Umleiten in die vorher gelöschte/geleerte Datei, die möglicherweise schon wieder ein paar Zeilen enthält
Umgeleitet wird die Ausgabe des Echo-Befehls der den jetzigen Zeileninhalt(%%B) und den Dateinamen(%%~nA) in escapten Klammern(^( und ^)) ausgibt
Z8: Die fertige Temporäre Datei in ihr "altes" Verzeichnis(Verzeichnis der Ausgangsdatei, %%~dpA) verschieben und vorhandene Datei ohne Nachfrage überschreiben (/Y)


01.
::Zweite und etwas schwierigere Version 
02.
@echo off 
03.
for /r "C:\Neuer Ordner" %%A in (*.dat) do ( 
04.
(for /f "usebackq delims=" %%B in ("%%A") do ( 
05.
echo.%%B ^(%%~nA^) 
06.
))>"%Temp%\%%~nxA"  
07.
move /Y "%Temp%\%%~nxA" "%%~dpA" 
08.
)
Erklärung:
Z2-4:Gleich wie im ersten
Z5: Die Zeile mit Dateinamen und Allem wird jetzt einfach nur ausgegeben
Z6: Die komplette Ausgabe der For-Scheife (also alle augegebenen Zeilen) wird in die Temporäre Datei geschrieben(deshalb auch die Klammern um die For-Schleife), wobei der alte Inhalt gelöscht wird.
So entfällt auch das löschen der Datei im Temp-Verzeichnis
Z7-8:Wieder wie im ersten (Dort halt 8+9)

Und wenn man jetzt alles in eine Zeile schreibt, mit &'s und vielen Klammern, damit die cmd.exe es kapiert, kommt man auf...
01.
(@echo off) & (for /r "C:\Neuer Ordner" %%A in (*.dat) do (((for /f "usebackq delims=" %%B in ("%%A") do (echo.%%B ^(%%~nA^)))>"%Temp%\%%~nxA") & (move /Y "%Temp%\%%~nxA" "%%~dpA")))
Ich hoffe es ist verständlich.

Mathe172
Bitte warten ..
Mitglied: atterbiker
14.03.2011 um 19:02 Uhr
Hallo Mathe172

Zitat von mathe172:
Ich hoffe es ist verständlich.

Mal sehn, ob ich das irgendwann mal verstehe. Werd es mir aber genau ansehen, versprochen!

Danke dir jedenfalls für diese Lösung, hätte ich in 100 Jahren so nicht hinbekommen
Bitte warten ..
Mitglied: atterbiker
14.03.2011 um 19:08 Uhr
Grüß dich Timo

Zitat von 60730:
    • Wobei sich die beiden "dummen" auch auf "zwei Dumme - ein Gedanke bezieht..."

Wobei du natürlich auch recht hast, andere Foren andere Sitten - und ich habe mich hier halt nicht nach Hausordnung vorgestellt

Danke, dass du den Wink verstanden hast

Danke, daß du mir auf die Sprünge geholfen hast

Zitat von atterbiker:
Leider liegen meine Batch-Zeiten schon zu lange zurück und da hab ich auch nicht sooo komplizierte Dinger verfaßt.

Und genau deshalb finde ich persönlich den Mathematischen Ansatz falsch
Ich behaupte von mir, dass ich Bätcheln kann und dass Mathes Ansatz sogar funktioniert (bedingt durch die
Verschachtelten Klammern) und das selbst mir nicht auf den ersten Blick aufgefallen ist - vermute ich, dir ist damit (auch wenn
der läuft) nicht wirklich geholfen.

Zitat von atterbiker:
Wäre also für eine idiotensichere Antwort sehr dankbar.

Naja- mein Ziel ist es eher - lernwillige Laien nicht wie Idioten da stehen zu lassen, sondern Ihnen an die Hand zu gehen, damit
ie selber drauf kommen.

Du gefällst mir, ehrlich

Auch mein Interesse besteht darin, daß ich mir sowas anzueignen versuche. Allerdings ist meine Vermutung, daß ich die nächsten Monate oder sogar Jahre wohl nicht mehr in so eine Verlegenheit komme - und daher hab ich einfach mal einen für mich bequemen Weg gewählt


Am liebsten wäre mir ja - der TO würde mal versuchen, das aufzudröseln, aber das wird er nicht können.
OK - der Wink mit dem Mathematischen Zaunpfahl und den Klammern - könnte hilfreich sein.

Diese wurde mir zum Glück schon abgenommen - danke Mathe - puh!
Bitte warten ..
Mitglied: Biber
14.03.2011 um 19:25 Uhr
Moin atterbiker,

auch von mir noch ein willkoommen im Forum.

Auch ich wollte vorhin nach T-Mo's kommentar dich nicht mit einer mehrmonatigen Entschlüsselungsaufgabe alleinlassen.
Und hatte deshalb mathes Gordischen Oneliner mit ein wenig mit dem Nudelholz bearbeitet.

Sieht dann so aus:
01.
:: ----MathesPlattgekloppterOneliner.cmd 
02.
REM Soll bestimmte Dateien suchen und den Dateinamen in jeder Zeile darin anhängen. 
03.
 
04.
@echo off 
05.
REM Unterdrückung des Wiedergabe der folgenden auszuführenden Befehle 
06.
REM ein SetLocal ist hier nicht nötig, da keine Variablen verwendet werden 
07.
 
08.
REM FOR-Anweisung aussen...: laufe rekursiv durch alle Unterordner 
09.
REM .......................:  und mache mit allen Dateien *.dat                             
10.
for /r "C:\Neuer Ordner" %%A in (*.dat) do ( 
11.
   REM Zweite FOR-Anweisung mit allen Inhalten (=Zeilen) aller Dateien *.dat mache... 
12.
       for /f "usebackq delims=" %%B in ("%%A") do ( 
13.
            REM ...mache eine Ausgabe #alteZeile# plus "(" +Dateiname +")" 
14.
            echo.%%B ^(%%~nA^) 
15.
         ) >"%Temp%\%%~nxA"  
16.
 
17.
         REM und zwar mal kurz nach "%Temp%\bisheriger Dateiname". 
18.
         REM und wieder zurück unter dem bisherigen Namen.    
19.
         move /Y "%Temp%\%%~nxA" "%%~dpA" 
20.
21.
REM möglich wäre auch ein zwischenschreiben nach [konstant] "%Temp%\X.y" 
22.
REM ...und mit [move /Y "%Temp%\X.Y" "%%~dpA] wieder retour.. 
23.
:: ---- eoMathesPlattgekloppterOneliner.cmd
Nun ist mir mathe zwar um Längen zuvorgekommen - ich poste es dennoch hier dazu. Für die Akten.

P.S. @mathe, @T-Mo:
Auch wenn ihr beide eigentlich nix für nervenschwache verzweifelte Newbies seid:
FALLS die Frischlinge einen ganzen 24h-Tag hier durchhalten ohne alles hinzuwerfen,
dann werden die hervorragend bedient.

Aber denkt auch an die ganzen Sissies, die hier vorbeidölmern... die bekommen gleich das Pipi in die Augen, wenn T-Mo eine Ansprache hält...

Grüße
Biber
Bitte warten ..
Mitglied: atterbiker
14.03.2011 um 19:41 Uhr
Hai Biber

Zitat von Biber:
Moin atterbiker,

auch von mir noch ein willkoommen im Forum.

Dank dir für deinen Willkommensgruß.

Auch ich wollte vorhin nach T-Mo's kommentar dich nicht mit einer mehrmonatigen Entschlüsselungsaufgabe alleinlassen.
Und hatte deshalb mathes Gordischen Oneliner mit ein wenig mit dem Nudelholz bearbeitet.

Nett von dir

Sieht dann so aus:
01.
>        for /f "usebackq delims=" %%B in ("%%A") do (

Die meisten Schleifen, etc. habe ich schon mal gesehen (lapalomapfeifend), aber was macht das "usebackq delims=" in der zitierten Zeile genau?
Und wie ist das mit den % und %%?

Nun ist mir mathe zwar um Längen zuvorgekommen - ich poste es dennoch hier dazu. Für die Akten.

Danke trotzdem.

P.S. @mathe, @T-Mo:
Auch wenn ihr beide eigentlich nix für nervenschwache verzweifelte Newbies seid:
FALLS die Frischlinge einen ganzen 24h-Tag hier durchhalten ohne alles hinzuwerfen,
dann werden die hervorragend bedient.

Och, ich bin zum Glück das Usenet gewöhnt. Da ist so ein Umgangston schon fast an der Tagesordnung.

Das mit dem Gruß hätte $man auch netter sagen können, aber ich habs jetzt wenigstens kapiert

Gruß
atterbiker
Bitte warten ..
Mitglied: bastla
14.03.2011, aktualisiert 18.10.2012
... und da bei mir auch noch etwas Senf übrig war :
move "%Temp%\%%~nxA" "%%~dpA"
hätte es auch getan - ist ja schließlich ein Batch ...
usebackq:Ermöglich die Einschliessung des Dateinamens in "", sodass es bei Leerzeichen im Pfad zu keinem Fehler kommt
delims= Kein Trennzeichen definieren, damit die ganze Zeile in einer Variable steht (%%B)
hatte mathe übrigens oben schon versteckt ...

Grüße
bastla

P.S.: ... und ein spezieller Willkommensgruß an atterbiker
Bitte warten ..
Mitglied: atterbiker
14.03.2011, aktualisiert 18.10.2012
Zitat von bastla:
> usebackq:Ermöglich die Einschliessung des Dateinamens in "", sodass es bei Leerzeichen im Pfad zu keinem
Fehler kommt
> delims= Kein Trennzeichen definieren, damit die ganze Zeile in einer Variable steht (%%B)
hatte mathe übrigens oben schon versteckt ...

Ich werde alt

P.S.: ... und ein spezieller Willkommensgruß an atterbiker

Mit speziellem Dank zurück
Bitte warten ..
Mitglied: atterbiker
14.03.2011 um 21:06 Uhr
Hallo und schönen Dank nochmal an alle fleißigen Helfer

Werde im Anschluß an dieses Posting diesen Beitrag als gelöst markieren.

Da mir hier sehr kompetent geholfen wurde und ich auch teils 0 recht freundlich aufgenommen worden bin, würde es mich freuen, wenn ich alsbald wieder mal ein Problem hätte.


So long
atterbiker
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Ausbildung
gelöst Nummerierung jeder Zeile in einer Textdatei (4)

Frage von Mihail zum Thema Ausbildung ...

C und C++
Dateien in Ordner kopieren anhand vom Teil eines Dateinamen (22)

Frage von onlyforu8373 zum Thema C und C ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...