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-Key: 73889368729

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

Printed on: May 11, 2024 at 06:05 o'clock

Member: Xerebus
Xerebus Feb 02, 2024 at 16:02:04 (UTC)
Goto Top
Und an was kann man der festmachen wenn die Zeilen unterschiedlich sind?
Mitglied: 11078840001
11078840001 Feb 02, 2024 updated at 17:04:36 (UTC)
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

Member: rubberman
rubberman Feb 04, 2024 at 11:34:15 (UTC)
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
Member: zerooo
zerooo Feb 04, 2024 at 13:35:31 (UTC)
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%">  
Mitglied: 11078840001
Solution 11078840001 Feb 04, 2024 updated at 14:58:28 (UTC)
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%%"^>     
        )
))
Member: zerooo
zerooo Feb 04, 2024 at 15:03:32 (UTC)
Goto Top
Vielen Dank. Funktioniert super.
Gruß
Member: rubberman
Solution rubberman Feb 05, 2024 at 16:36:19 (UTC)
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