zerooo
Goto Top

Batch - Einfügen an definierter Stelle einer txt

Hallo

ich bin neu hier, habe keine bis wenig Ahnung vom Batch-Programmieren und würde gerne folgendes erreichen:

Ich habe eine Textdatei [test.txt] und ein kleine Batch-Anweisung, welche mir alle Bilddateien inkl. Pfad aus einem bestimmten Ordner listet. Mein Problem liegt darin, dass ich es nicht hinbekomme, dass die Bild-Pfad-Liste an eine definierte Stelle der [test.txt] geschrieben wird.
Die Zeile zu bestimmen, ab welcher eingefügt werden soll, kann entweder über eine feste Zeilennummer [Zeile 6] oder über ein Suchen-Ersetzen [###] erfolgen.

Ich hoffe meine Ausführungen sind verständlich.
Vielen Dank schon mal im Voraus.

Gruß Hannes

Batch-Anweisung
@echo off
FOR /R ".\" %%F IN (*.jpg *.png *.bmp) DO (  
echo %%F >> .\test.txt
)

TXT vor dem Ausführen
DIESER 
TEXT 
STEHT 
AM 
ANFANG

### Hier soll die Ausgabe der Anweisung stehen. Die Anzahl der Zeilen kann variieren ###

DIESER 
TEXT 
STEHT 
AM 
ENDE 

TXT nach dem Ausführen
DIESER 
TEXT 
STEHT 
AM 
ANFANG

### Hier soll die Ausgabe der Anweisung stehen. Die Anzahl der Zeilen kann variieren ###

DIESER 
TEXT 
STEHT 
AM 
ENDE C:\test\rge.jpg 
C:\test\sew.jpg 
C:\test\uiz.jpg 
C:\test\wer.jpg 

Gewünschtes Ergebnis
DIESER 
TEXT 
STEHT 
AM 
ANFANG

C:\test\rge.jpg 
C:\test\sew.jpg 
C:\test\uiz.jpg 
C:\test\wer.jpg

DIESER 
TEXT 
STEHT 
AM 
ENDE  

Content-ID: 73889368729

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

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

Xerebus
Xerebus 02.02.2024 um 17:02:04 Uhr
Goto Top
Und an was kann man der festmachen wenn die Zeilen unterschiedlich sind?
11078840001
11078840001 02.02.2024 aktualisiert um 18:04:36 Uhr
Goto Top
@echo off
set "quelle=D:\test.txt"  
set "ziel=D:\testneu.txt"  
>"%ziel%" (for /f "tokens=1,* delims=:" %%a in ('findstr /n "^" "%quelle%"') do (  
	echo.%%b
	if "%%b" == "ANFANG" dir /b /s /a-d *.jpg *.png *.bmp  
))

Oder PS

rubberman
rubberman 04.02.2024 um 12:34:15 Uhr
Goto Top
Wenn sich die Anzahl Kopf- und Fußzeilen in Grenzen hält, wäre es auch denkbar sie hart im Code zu haben.
@echo off &setlocal
set "file=test.txt"  

>"%file%" (  
  echo(DIESER
  echo(TEXT
  echo(STEHT
  echo(AM
  echo(ANFANG
)

>>"%file%" dir /a-d /b /s *.jpg *.png *.bmp  

>>"%file%" (  
  echo(DIESER
  echo(TEXT
  echo(STEHT
  echo(AM
  echo(ENDE
)

Steffen
zerooo
zerooo 04.02.2024 um 14:35:31 Uhr
Goto Top
Hallo

Vielen Dank für die Vorschläge.
Die Lösung von 'abramakabra' funktioniert grundsätzlich.
Leider muss ich gestehen, dass ich nicht mein komplettes Problem erklärt habe, da ich dachte ich könnte es selbst anpassen.

Ich benötige vor und nach den Bildpfaden noch Zeichen, damit ich das Ergebnis dann als html verwenden kann.
Könnte mir jemand dazu vielleicht auch noch einen Tipp gerben?

Danke.

So sollte der einzufügende Teil aussehen:
<img class="mySlides" src="C:\test\rge.jpg" style="width:100%">   
<img class="mySlides" src="C:\test\sew.jpg" style="width:100%">  
<img class="mySlides" src="C:\test\uiz.jpg" style="width:100%">  
<img class="mySlides" src="C:\test\wer.jpg" style="width:100%">  
11078840001
Lösung 11078840001 04.02.2024 aktualisiert um 15:58:28 Uhr
Goto Top
@echo off
set "quelle=D:\test.txt"    
set "ziel=D:\testneu.txt"    
>"%ziel%" (for /f "tokens=1,* delims=:" %%a in ('findstr /n "^" "%quelle%"') do (    
	echo.%%b
	if "%%b" == "ANFANG" (  
             for /f "delims=" %%c in ('dir /b /s /a-d *.jpg *.png *.bmp') do echo.^<img class="mySlides" src="%%c" style="width:100%%"^>     
        )
))
zerooo
zerooo 04.02.2024 um 16:03:32 Uhr
Goto Top
Vielen Dank. Funktioniert super.
Gruß
rubberman
Lösung rubberman 05.02.2024 um 17:36:19 Uhr
Goto Top
@11078840001
style="width:100%%" 
sonst gibt's kein Prozentzeichen in der Ausgabe.

@zerooo
Um das vernünftig zu scripten, ist Batch nix. Aber naja ...
Klingt ein bisschen wie https://www.w3schools.com/w3css/w3css_slideshow.asp
Grundsätzlich solltest du File URLs aus den Windows Pfaden machen und die Ausgabe in UTF-8 mit einem Mindestmaß an URL Encoding vornehmen.

template.html
<!DOCTYPE html>
<html lang="en">  
<title>W3.CSS</title>
<meta name="viewport" content="width=device-width, initial-scale=1">  
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">  
<style>
.mySlides {display:none;}
</style>
<body>

<h2 class="w3-center">Manual Slideshow</h2>  

<div class="w3-content w3-display-container">  
  <button class="w3-button w3-black w3-display-left" type="button" onclick="plusDivs(-1)">&#10094;</button>  
  <button class="w3-button w3-black w3-display-right" type="button" onclick="plusDivs(1)">&#10095;</button>  
</div>

<script>
var slideIndex = 1;
showDivs(slideIndex);

function plusDivs(n) {
  showDivs(slideIndex += n);
}

function showDivs(n) {
  var i;
  var x = document.getElementsByClassName("mySlides");  
  if (n > x.length) {slideIndex = 1}
  if (n < 1) {slideIndex = x.length}
  for (i = 0; i < x.length; i++) {
    x[i].style.display = "none";    
  }
  x[slideIndex-1].style.display = "block";    
}
</script>

</body>
</html>

Batch Code:
@echo off&setlocal DisableDelayedExpansion
set "template=template.html"  
set "out=slideshow.html"  
set "insert_after=<div class="w3-content w3-display-container">"  

setlocal EnableDelayedExpansion&>nul chcp 65001
<"!template!" >"!out!" (for /f %%i in ('type "!template!"^|find.exe /c /v ""') do for /l %%j in (1 1 %%i) do (  
  set "line="&set /p "line="&echo(!line!&if "!line!"=="!insert_after!" (  
    setlocal DisableDelayedExpansion&for /r %%k in (*.jpg *.png *.bmp) do (
      set "url=%%~k"&setlocal EnableDelayedExpansion&set "url=!url:%%=%%25!"&set "url=!url: =%%20!"&set "url=!url:#=%%23!"  
      echo(  ^<img class="mySlides" src="file:///!url:\=/!" alt="" style="width:100%%"^>&endlocal  
    )
    endlocal
)))

Mit Edge getestet, funktioniert das damit auch für Dateinamen mit Sonder- und Multibytezeichen, bspw.
~}{`_^][@=;.-,+)('&%$# !.png  
😀𐍈𤭢€Яßµ³ abc123.png

Steffen