moses1980
Goto Top

Inhalt mehrere Dateien via Batch ändern

Hallo,

bei ca. 300 Text-Dateien muss ich in Zeile 5 die Zahlen "32" voranstellen.
Kann ich das mit Batch lösen?

Gruß

Content-Key: 189001

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

Printed on: April 23, 2024 at 22:04 o'clock

Member: bastla
bastla Aug 02, 2012 updated at 10:40:03 (UTC)
Goto Top
Hallo moses1980!
Kann ich das mit Batch lösen?
Wenn Du könntest, hättest Du vermutlich nicht gefragt ... face-wink

Versuch es mal damit (ungetestet):
@echo off & setlocal
set "Quelle=D:\Ordner mit 300 txt-Dateien"  
set "Ziel=%Quelle%\Neu"  
set "Pre=32"  
set /a ZNr=5

md "%Ziel%" 2>nul  

for %%i in ("%Quelle%\*.txt") do (  
    (for /f "delims=" %%z in ('findstr /n "^" "%%i"') do (  
        set "Zeile=%%z"  
        setlocal enabledelayedexpansion
        for /f "delims=:" %%n in ("!Zeile!") do set Nr=%%n  
        if !Nr!==%ZNr% (echo %Pre%!Zeile:*:=!) else (echo(!Zeile:*:=!)
        endlocal
    ))>"%Ziel%\%%~nxi"  
)
Für die geänderten Dateien wird ein Unterordner (siehe Zeile 3) erzeugt ...

Grüße
bastla

[Edit] Zeilennummer und Präfix leichter anpassbar gemacht [/Edit]
Member: moses1980
moses1980 Aug 02, 2012 at 10:48:30 (UTC)
Goto Top
Vielen Dank - hat super geklappt.

Gruß
Member: rloxley
rloxley May 31, 2018 updated at 13:50:24 (UTC)
Goto Top
Hallo face-smile

Da der Beitrag erst 6 Jahre alt ist... hänge ich mich mal dran face-smile

Ich brauche etwas Ähnliches:
Und zwar soll IN ALLEN VORHANDENEN UNTERORDNERN in der dort jeweils vorhandenen *.nfo-Datei immer in Zeile 2: <title>XXXXXXXXXXXXXXXXXXXX</title> (der tag ist bereits vorhanden, die 20 X sind nur ein Platzhalter) eben dieser Platzhalter mit dem jeweils individuellen Dateinamen der *.nfo-Datei (wahlweise der Name des Unterordners, in dem sie liegt = identisch) ausgetauscht werden.

Beispiel:
Unterordner: "Forrest Gump", darin liegt eine "Forrest Gump.nfo", in deren 2. Zeile steht: <title>XXXXXXXXXXXXXXXXXXXX</title>
Diese 2. Zeile soll jetzt in <title>Forrest Gump</title> geändert werden.
Für alle weiteren vorhandenen Unterordner genauso jeweils mit ihrem *.nfo-Dateinamen (= Ordnernamen)...

Dies brauche ich für mehrere Hauptordner mit jeweils unterschiedlich vielen Unterordnern darin...

Die Kodierung des Inhalts der *.nfo-Dateien ist immer UTF-8 und die Sprache XML.
Falls es wichtig ist: im XML-Aufbau sind die Zeilen der Übersicht halber ja oft eingerückt, so auch diese Zeile 2. Davor sind genau 7 Leerzeichen.
Also nicht:
<title>XXXXXXXXXXXXXXXXXXXX</title>
sondern:
7 Leerzeichen<title>XXXXXXXXXXXXXXXXXXXX</title>

Ich hoffe, das ist so verständlich face-smile

So eine batch-Datei würde mir wirklich jede Menge Arbeit ersparen face-wink

Vielen herzlichen Dank im Voraus, falls das jemand hinbekommt face-smile

Viele Grüße
Mitglied: 136166
136166 May 31, 2018 updated at 14:42:05 (UTC)
Goto Top
Da der Beitrag erst 6 Jahre alt ist... hänge ich mich mal dran
Bitte erst mal die Richtlinien lesen
Keine Takeovers. Versuche nicht, Beiträge anderer Autoren mit Ihren Fragen zu anderen Themen zu übernehmen. Eröffne lieber einen neuen eigenen Beitrag.

Vielen herzlichen Dank im Voraus, falls das jemand hinbekommt
Nicht weiter schwer ...

Normalerweise macht man das ja mit XML-Interpreter, da hier aber der Aufbau deiner Dateien unbekannt ist hier ausnahmsweise via String-Replacement.
@echo off
set "ordner=D:\Illegalkopiertefilme"  
powershell -ExecutionPolicy ByPass -NoProfile -Command "gci "%ordner%" -Filter *.nfo -Recurse -Force | %%{(gc $_.Fullname) -replace '(?<=<title>).*?(?=</title>)',$_.Directory.Name | sc $_.Fullname -Force -Verbose -Encoding UTF8}"  
Member: rloxley
rloxley May 31, 2018 at 14:56:33 (UTC)
Goto Top
Hallo decathlon,

ich hätte ja mit Allem gerechnet, aber nicht mit einer so ultraschnellen und funktionierenden Hilfe! Tausend Dank!

Entschuldigung, dass ich mich hier drangehängt habe, das hätte ich auch ohne Richtlinien besser wissen können (müssen).

Ich habe direkt zwei weitere Ideen, die ich gleich in einem eigenen Kommentar beschreibe.

Vielen herzlichen Dank noch einmal. Das hilft mir ungemein face-smile