• Hallo Gast, du kaufst gerne günstig ein und erfährst oft vor deinen Freunden von interessanten Angeboten? Dann kannst du dein Talent als Schnäppchenjäger jetzt zu Geld machen und anderen PCGH-Lesern beim Sparen helfen! Schau einfach mal rein - beim Test der Community Deals!

Variablen in Batch aus Datei auslesen

flx23

BIOS-Overclocker(in)
Hallo Community,

Ich stelle mich gerade ein wenig wie der erste Mensch an :-(

Ich habe folgende Aufgabenstellung:
In einem Ordner habe ich eine Reihe von Bildern im Hochformat. Diese sollen mittels Irfanview und Komandozeile als "Panorama" zusammengesetzt werde. Dies Funktioniert auch soweit, allerdings nur mit fixen Werten für Datei 1 und Datei 2.


echo off

Set PFAD=C:\Users\...
Set Datei1=... 01.jpg
Set Datei2=... 02.jpg

"C:\Program Files\IrfanView\i_view64.exe" /panorama=(1,%PFAD%%Datei1%,%PFAD%%Datei2%)/convert=%Datei1%+%Datei2%

pause




Um das ganze Weiter zu automatisieren wollte ich einfach mittels Batch den Ordnerinhalt auslesen und entsprechend die Werte übergeben.
Dazu habe ich im ersten schritt alle Daten des Ordners (ausschließlich Bilder) in ein Textfile ausgegeben.
Anschliesend wollte ich mittels for /f die Daten auslesen. Auch das klappt soweit.

dir /b /a-d >inhalt.txt

Set Inhalt=C:\Users\...\Inhalt.txt

FOR /F "delims=" %%i in (%Inhalt%) do (
echo %%i
)




Was mir jedoch nicht gelingt ist, die Strings die in %%i in der For-Schleife abgefragt werden in eine Variable zu pressen...

Ich habe dazu die letzten Tage schon das Netz durchwühlt und diverseste Tutorials angeschaut aber so wirklich hat es einfach nicht hingehauen... Vorgestellt hatte ich es mir in etwas so:


Set N=1

FOR /F "delims=" %%i in (%Inhalt%) do (
echo %%i
Set Datei%N% = %%i
Set /a N=N+1
)



In diesem Fall hatte ich gehofft, dass die erste Zeile als Datei1 gespeichert wird, die zweite Zeile (beim Zweiten durchlauf der For Schleife) als Datei2 und so weiter.

Wenn jemand eine Idee hat wie es geht wäre ich sehr dankbar...

Vielen Dank
flx23
 

XT1024

BIOS-Overclocker(in)
i_view64.exe /panorama=(1,X:\Ordner\*.jpg)
Ganz ohne batch oder was ist das Ziel?
 
TE
flx23

flx23

BIOS-Overclocker(in)
i_view64.exe /panorama=(1,X:\Ordner\*.jpg)
Ganz ohne batch oder was ist das Ziel?
Nicht ganz, in diesem Fall werden ja einfach alle Bilder nebeneinander angeordnet.
Ich wollte jedoch immer nur zweit Bilder nebeneinander haben.
Also
panorama 1 = Bild 1 und Bild 2
Panorama 2 = Bild 3 und Bild 4
...
 

Crujach

Kabelverknoter(in)
schon mal Powershell probiert? Ich bastel damit inzwischen lieber herum, als mit Batch-Dateien :)

hier mein Beispielcode (kannst du in windows10 in der Powershell ISE selber einfügen und austesten, ist bei Win10 mit dabei:

C-ähnlich:
$Bilderpfad = "K:\Bilder"
$Array = @()
$Array = Get-ChildItem $Bilderpfad | select -Expand Name
for ($i = 0; $i -lt $array.length; $i= $i+1){
$File_1 = $Bilderpfad + "\" + $Array[$i]
$i = $i+1
$File_2 = $Bilderpfad + "\" + $Array[$i]
Start-Process -FilePath "C:\Program Files\IrfanView\i_view64.exe" -ArgumentList "/panorama=(1,$File_1,$File_2)"
}

Die erste Variable enthält den Pfad zu deinen Bildern.
Die Variable $Array erstellt eine Liste aller Dateinamen der Bilder in dem Ordner. d.h. das erste Element der Liste $Array[0] ist der erste Dateiname usw.
dann gehst du mit der for-Schleife von 0 bis zum Ende des Arrays
zum Testen kannst du die Dateinamen in der Konsole ausgeben mit
Write-Host $Array[$i]
mit "start-process" starte ich irfanview und gebe als Parameter den panorama-Befehl mit... :)

Hab dafür Irfanview wieder installiert (benutze sonst XnView) und es klappt... ausser wenn du eine ungerade Anzahl an Bildern hast, dann kommt zum Schluss eine Fehlermeldung, z.b. weil er bei mit nur 11 Bilder hat, aber 12 Bilder erwartet..
 
Oben Unten