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
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, 6270 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 ..
Ähnliche Inhalte
Batch & Shell
Shell Script nach bestimmten Zeilen in einer Datei suchen
gelöst Frage von windelterroristBatch & Shell4 Kommentare

Hallo, Ich würde gerne wissen, wie ich im Shell Script nach einer Zeile in einer bestimmten Datei (z.B. test01) ...

Batch & Shell
Bestimmte Zeilen einer Datei addieren - Linux
gelöst Frage von lapvikaBatch & Shell2 Kommentare

Hallo zusammen, ich habe eine Datei die wie folgt aussieht: 536870912 - System1_2 536870912 - System1_3 536870912 - System1_4 ...

Batch & Shell
Batch zum suchen bestimmter Dateien
gelöst Frage von FurycanBatch & Shell2 Kommentare

Hallo zusammen, ich hoffe man kann mir hier helfen. Ich Suche ein Script das mir folgendes macht: In einem ...

Batch & Shell
Batch-Datei um Dateien mit bestimmten Dateinamen zu löschen
gelöst Frage von SwisterBatch & Shell4 Kommentare

Hallo, Ich habe mehrere Tausend Bilder die folgenden Namen haben "m20130310040500500". Der Name setzt sich wie so zusammen "m" ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 15 StundenApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 20 StundenWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 20 StundenWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 1 TagInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Windows XP
Windows XP Aktivieren geht nicht
Frage von tetikmiroWindows XP13 Kommentare

Hallo Ich habe einen Windows XP mit einen vCenter Converter umgezogen auf eine ESXI. Soweit funktioniert dies auch ohne ...

Blogs
Immer wiederkehrende PHP Fehlermeldung bei Wordpress UTF-8 - ASCII
gelöst Frage von vcdweltBlogs11 Kommentare

Hi, seit einiger Zeit wird mein error_log meines Wordpress Blogs mit immer der gleichen Fehlermeldung überschwemmt. 14-Dec-2017 08:18:05 UTC ...

Switche und Hubs
Redundante L2 LWL Leitung über 2 Standorte - Spanning Tree - HP Equipment
gelöst Frage von ResolvSwitche und Hubs10 Kommentare

Hallo, ich stehe vor der Herausforderung eine Redundante L2 LWL Leitung über 2 Standorte herzustellen. Grundsätzliches Switching Know How ...