tiff0588
Goto Top

Batch zum Orden von Dateien in die jeweiligen Ordner!

Hallo Leute,

ich schreibe gerade an meiner Masterarbeit und arbeite mit einer Menge RAW und TIFF Dateien. Diese liegen wie folgt in einem Ordner (aber auch getrennt in einzelnen Ordner möglich) vor:

TTC00078
TTC00079
TTC00080
TTC00081
...
TTC10078
TTC10079
TTC10080
TTC10081
...
TTC20078
TTC20079
TTC20080
TTC20081
...
TTC30078
TTC30079
TTC30080
TTC30081
...
TTC40078
TTC40079
TTC40080
TTC40081
...
TTC50078
TTC50079
TTC50080
TTC50081

Nun möchte ich aber alle z.B: 78 Dateien in einem Ordner haben und alle 79 in einem Ordner und so weiter.
Das sähe dann so aus:

TTC00078
TTC10078
TTC20078
TTC30078
TTC40078
TTC50078 in einem Ordner und das mit 79, 80 u.s.w.

ich habe leider keine Ahnung von der Materie und auch nicht die Zeit alles manuell in einzelne Ordner zu verschieben. Vielleicht hättet ihr den für mich passenden Quellcode. Ich könnte garnicht sagen, wie dankbar ich euch wäre. Und sry, dass ich euch nach so einem Mist frage.

LG

Content-Key: 241385

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

Printed on: April 26, 2024 at 07:04 o'clock

Member: emeriks
emeriks Jun 19, 2014 updated at 13:48:20 (UTC)
Goto Top
Hi,
wenn die Dateinamen immer die selbe feste Länge haben, dann kanst Du beim MOVE mit Wildcards arbeiten, hier z.B. "??????78" und "??????79" usw.
Die Zahlen kannst Du mit verschachtelten For-Schleifen genrieren.

Bsp. Batch

@echo off
For %%z in (0 1 2 3 4 5 6 7 8 9) Do For %%e in (0 1 2 3 4 5 6 7 8 9) Do md %%z%%e && move ??????%%z%%e.* %%z%%e

E.
Member: Tiff0588
Tiff0588 Jun 19, 2014 updated at 14:07:56 (UTC)
Goto Top
Hi,

also ich habe keine Ahnung von der Syntax und kann damit leider nichts anfangen. Sry. Die rausgesuchten Dateien müssten auch in einen automatisch angelegten Ordner für den Dateien-Block verschoben werden, da ich sonst ja 500 Ordner selber erstellen muss. Vielleicht geht es auch mit einem Windows-Skript oder so.

LG
Member: emeriks
emeriks Jun 19, 2014 at 14:50:13 (UTC)
Goto Top
Äh, eine Batch ist ein "Windows-Skript". So zu sagen. Es läuft auch unter Windows.

Die von mir genannten Zeilen erstellen Ordner von 00 bis 99 und verschieben die Dateien entsprechend. Man kann das auch für 000-499 oder 999 anpassen.

1. Erstelle mit Notepad eine Datei im selben Ordner, in welchem die Bilder sind. Beliebiger Name, aber Dateiendung ".cmd" (nicht .cmd.txt !) (und auch nicht mit Ziffern am Ende face-wink ), z.B. MoveFiles.cmd
2. Kopiere den u.g. Code rein und speicher die Datei erneut.
3. starte cmd.exe, gehe auf das Laufwerk und wechsle in den Ordner mit den Bildern.
4. starte die eben erstellte batch

Diese erstellt jetzt Ordner von 000 bis 999 und verschiebt die Dateien entsprechend.

@echo off
For %%h in (0 1 2 3 4 5 6 7 8 9) Do For %%z in (0 1 2 3 4 5 6 7 8 9) Do For %%e in (0 1 2 3 4 5 6 7 8 9) Do md %%h%%z%%e && move ?????%%h%%z%%e.* %%h%%z%%e

E.
Member: Tiff0588
Tiff0588 Jun 20, 2014 updated at 09:37:19 (UTC)
Goto Top
Hi,
vielen Dank für deine Antwort. Hat super funktioniert. Ich kann dir gar nicht genug danken, super Forum hier :D

LG
Member: emeriks
emeriks Jun 20, 2014 at 09:40:42 (UTC)
Goto Top
Bei mir funktioniert der Code. Habe es eben nochmal getestet.

Diese Meldung "Dateiname existiert bereits, oder die Datei konnte nicht gefunden werden" kannste ignorieren. Sie kommt von den vielen Mustern, welches es noch nciht gibt. Wemm es z.B. noch keine Dateien mit xxxxx999 gibt, dann wird es bei 999 eben meckern.

Ich habe den Code nochnmal angepasst. Jetzt werden die Ordner gar bloß erstellt, wenn entsprechende Dateien vorhanden sind.
Immer vorausgesetzt, dass die Dateinamen 8 Zeichen lang sind (plus Endung), wie in Deiner Anfrage dargestellt.

@echo off
For %%h in (0 1 2 3 4 5 6 7 8 9) Do For %%z in (0 1 2 3 4 5 6 7 8 9) Do For %%e in (0 1 2 3 4 5 6 7 8 9) Do if exist ?????%%h%%z%%e.* (md %%h%%z%%e && move ?????%%h%%z%%e.* %%h%%z%%e)

E.
Member: Tiff0588
Tiff0588 Jun 20, 2014 at 09:48:48 (UTC)
Goto Top
Vielen Dank, hat doch super funktioniert, nun hab ich die Funktion "gdal_merge" womit ich alle Tiffs in einem Ordner zu einer gestackten Datei verbinden kann, mit dem Programm OSGeo4W Shell von QuantumGIS. Ist es möglich die einzelnen Ordner zu durchlaufen und die Funktion für die Dateien auszuführen und die entstandene Datei in dem jeweiligen Ordner zu speichern?

LG
Member: bastla
bastla Jun 20, 2014 at 15:39:52 (UTC)
Goto Top
Hallo Tiff0588 und willkommen im Forum!

Eine Schleife über alle Unterordner eines Ordners kannst Du einfach nach folgendem Schema erzeugen:
for /d %%i in ("D:\Ordner mit den Unterordnern\*") do (  
    pushd "%%i"  
    echo Programm wird gestartet in %%i
    popd
)
Anstelle der Ausgabe in Zeile 3 wäre dann der von Dir nicht näher beschriebene Aufruf des Programms "OSGeo4W Shell" durchzuführen, wobei durch das "push" vorweg in den jeweiligen Ordner gewechselt wird, sodass Du keine Pfadangabe für die Quell- und Zieldateien benötigst ...

Grüße
bastla
Member: Tiff0588
Tiff0588 Jun 30, 2014 at 15:43:46 (UTC)
Goto Top
He Leute,
ich habe es immer noch nicht geschafft. Ich habe folgenden Code:

@echo OFF
SETLOCAL EnableDelayedExpansion

SET mypath=D:\test\

FOR /F %%i IN ('DIR /B %mypath%*/S *.tif') DO (

SET infile=%%i

gdal_merge -o Stacked.img -of HFA -separate %mypath%!infile! //Beschreibung der gdal_merge: http://www.gdal.org/gdal_merge.html

)

wenn ich das mit OSGeo4W Shell ausführe, bekomme ich die Fehlermeldung IndexError: list index out of range

Ich will das der im Verzeichnis D:\test alle Unterordner durchläuft und für alle Dateien mit der Endung .tif die Funktion gdal_merge ausführt, die für jeden Ordner in dem jeweiligen eine Datei Stacked.img anlegen soll.

Könnt ihr mir evtl. da weiterhelfen. Der Code von BASTLA hat leider nicht funktioniert

LG
Member: bastla
bastla Jun 30, 2014 at 19:55:15 (UTC)
Goto Top
Hallo Tiff0588!

Versuch mal
@echo off & setlocal
set "mypath=D:\test"  

for /d %%i in ("%mypath%\*") do (  
    pushd "%%i"  
    for %%a in (*.tif) do gdal_merge -o Stacked.img -of HFA -separate "%%a"  
    popd
)
Grüße
bastla
Member: Tiff0588
Tiff0588 Jul 01, 2014 at 12:02:09 (UTC)
Goto Top
vielen Dank für die Antwort. Jetzt geht er in die einzelnen Ordner und führt die Funktion anscheinend für jedes Tiff aus. Aber es sollen die 5 Dateien

(z.B. TTC0123_0R
TTC0123_2R
TTC0123_3R
TTC0123_4R
TTC0123_5R)

als Input verwendet werden, also praktisch gdal_merge -o Stacked.img -of HFA -separate HIER die 5 Tiffs
Member: bastla
bastla Jul 01, 2014 at 12:29:25 (UTC)
Goto Top
Hallo Tiff0588!

Na dann eben etwas in der Art (ungetestet):
@echo off & setlocal enabledelayedexpansion
set "mypath=D:\test"  

for /d %%i in ("%mypath%\*") do (  
    pushd "%%i"  
    set "files="  
    for /f "delims=" %%a in ('dir /b/on *.tif') do set "files=!files! %%a"  
    gdal_merge -o Stacked.img -of HFA -separate !files!
    popd
)
Grüße
bastla
Member: Tiff0588
Tiff0588 Jul 01, 2014 at 12:48:08 (UTC)
Goto Top
He,
Danke, geht aber immer nur für den ersten Ordner mit den 5 Tiffs und bring für die anderen Ordner dann die Fehlermeldung
ERROR 4: !files! does not exist in the file system, and is not recognised as a supported dataset name.

LG
Member: bastla
bastla Jul 01, 2014, updated at Jul 02, 2014 at 10:47:45 (UTC)
Goto Top
Hallo Tiff0588!

Versuch es zum Testen mit folgender Version:
@echo off & setlocal enabledelayedexpansion
set "mypath=D:\test"  

for /d %%i in ("%mypath%\*") do (  
    pushd "%%i"  
    set "files="  
    for /f "delims=" %%a in ('dir /b/on *.tif') do set "files=!files! %%a"  
    echo Ordner:  %%i
    if defined files echo gdal_merge -o Stacked.img -of HFA -separate !files!
    popd
)
Du kannst so sehen, wie der Aufruf von "gdal_merge" erfolgen würde (nachdem das echo davor entfernt wurde) - die Verarbeitung wird so auch nur versucht, wenn tatsächlich .tif-Dateien gefunden wurden ...

Grüße
bastla
Member: Tiff0588
Tiff0588 Jul 01, 2014 at 13:20:47 (UTC)
Goto Top
He,

hab den Test gemacht und er zeigt mir auch die richtige Funktion an, also
Ordner: D:\test\123
gdal_merge -o Stacked.img -of HFA -separate TTC0123_0R.tif TTC0123_2R.tif TTC0123_3R.tif TTC0123_4R.tif TTC0123_5R.tif

und das auch für die anderen Ordner, also findet er auch alle .tif, aber trotzdem bringt er den selben Fehler ERROR 4

LG
Member: bastla
bastla Jul 02, 2014 at 10:47:32 (UTC)
Goto Top
Hallo Tiff0588!
trotzdem bringt er den selben Fehler ERROR 4
Sorry - woran es dann hakt, kann ich Dir auch nicht sagen ...

Grüße
bastla
Member: Tiff0588
Tiff0588 Jul 02, 2014 at 12:48:49 (UTC)
Goto Top
Ok Danke,

mir kam gerade die Idee, dass ich über meine Ordner iteriere, die Tiffs rausgesucht und in eine Liste mit Pfad geschrieben werden.
Code sieht wie folgt aus:

@echo off & setlocal enabledelayedexpansion
set "mypath=D:\test"
for /d %%i in ("%mypath%\*") do (
pushd "%%i"
set "files="
for /f "delims=" %%a in ('dir /b/on *.tif') do set "files=!files! %%a"
echo Ordner: %%i
dir /b /s !files! > list.txt
popd
)

Das hat auch super funktioniert. Jetzt liegt in jedem Ordner eine List.txt mit den Pfaden und dem Namen der 5 Tiffs.
Jetzt wollte ich mit einer anderen batch -Datei wieder über die Ordner iterieren und jeweils die .txt als Input nehmen, was aber wieder nur beim ersten Ordner funktioniert hat. Fehlermeldung ERROR1: unable to open optfiles '!files!' No such file or directory

Code ist:

@echo off & setlocal enabledelayedexpansion
set "mypath=D:\test"
for /d %%i in ("%mypath%\*") do (
pushd "%%i"
set "files="
for /f "delims=" %%a in ('dir /b/on *.txt') do set "files=!files! %%a"
echo Ordner: %%i
if defined files gdal_merge -o Stacked.img -of HFA -separate --optfile !files!
popd
)

Vielleicht könnt ihr mir ihr noch weiterhelfen
Member: Tiff0588
Tiff0588 Jul 05, 2014 at 08:02:58 (UTC)
Goto Top
So hab das Problem lösen können.

es musste noch start /B vor die Funktion gdal_merge gesetzt werden und nun funktioniert alles.

Vielen Dank noch mal für eure Hilfe, super Forum hier