pistensau
Goto Top

Batch - Was tun, wenn der Dateiname nicht bekannt ist?

Hallo Community,

ich brauche eure Hilfe...

Ich versuche eine .jpg Datei in einem vordefinierten Pfad zu finden, kopieren und Kopie umbenennen.
Der Dateipfad ist bis zu einem gewissen Grad gleich und lediglich eine ASIN im Namen ändert sich. Diese ist auch nicht bekannt. Ich habe es mit einer for Schleife versucht und es klappt bis zu einem Gewissen grad.

Code sieht wie folgt aus:

@echo off
:start
set /P sku="SKU:"  
if [%sku%]== goto :eof

set "quelle=X:\01-ARCHIV GRAFIK"  
echo %quelle%

set "ziel=V:\Content\Prozess\01_Freistellung u Retusche\02_Freigabe\Upload\Bildupload Adam"  
echo %ziel%

set sku_t1=%sku:~0,4%
set sku_t2=%sku:~0,5%

set "FILE=%quelle%\%sku_t1%\%sku_t2%\%sku%\06_AMZ\1500"  

if exist "%FILE%" (  
	echo Ein Ordner zu dieser SKU existiert!
	goto kopieren
)
if not exist "%FILE%" (  
	echo Ein Ordner zu dieser SKU existiert nicht!
	goto :eof
)


:kopieren
echo.
echo ==========================================
echo = Kopieren und Umbenennen                =
echo ==========================================
echo.

echo mainfallback
for /f %%a in ('dir /b "%FILE%"\ ^| findstr /L "MAIN2"') do set mainfallback=%%a  
if exist "%FILE%\%mainfallback%" (  
	XCOPY "%FILE%\%mainfallback%" "%ziel%\For_Akeneo\%sku%\%sku%_yy_0001_mainfallback___.jpg*" /Y  
)

echo plain
for /f %%b in ('dir /b "%FILE%"\ ^| findstr /L "PLAIN"') do set plain=%%b  
if exist "%FILE%\%plain%" (  
	XCOPY "%FILE%\%plain%" "%ziel%\For_Akeneo\%sku%\%sku%_yy_0001_plain___.jpg*" /Y  
)

echo main
for /f %%c in ('dir /b "%FILE_DE%"\ ^| findstr /L "MAIN"') do set main=%%c  
if exist "%FILE_DE%\%main%" (  
	XCOPY "%FILE_DE%\%main%" "%ziel%\For_Akeneo\%sku%\%sku%_yy_0001_main___.jpg*" /Y  
)

echo thumb
for /f %%d in ('dir /b "%FILE_DE%"\ ^| findstr /L "SWCH"') do set thumb=%%d  
if exist "%FILE_DE%\%thumb%" (  
	XCOPY "%FILE_DE%\%thumb%" "%ziel%\For_Akeneo\%sku%\%sku%_yy_0100_thumb___.jpg*" /Y  
)

echo usp de 2
for /f %%e in ('dir /b "%FILE_DE%"\ ^| findstr /L "PT01"') do set usp_de_2=%%e  
if exist "%FILE_DE%\%usp_de_2%" (  
	XCOPY "%FILE_DE%\%usp_de_2%" "%ziel%\For_Akeneo\%sku%\%sku%_de_0002_usp___.jpg*" /Y  
)

echo usp de 3
for /f %%f in ('dir /b "%FILE_DE%"\ ^| findstr /L "PT02"') do set usp_de_3=%%f  
if exist "%FILE_DE%\%usp_de_3%" (  
	XCOPY "%FILE_DE%\%usp_de_3%" "%ziel%\For_Akeneo\%sku%\%sku%_de_0003_usp___.jpg*" /Y  
)

echo usp de 4
for /f %%g in ('dir /b "%FILE_DE%"\ ^| findstr /L "PT03"') do set usp_de_4=%%g  
if exist "%FILE_DE%\%usp_de_4%" (  
	XCOPY "%FILE_DE%\%usp_de_4%" "%ziel%\For_Akeneo\%sku%\%sku%_de_0004_usp___.jpg*" /Y  
)

echo usp de 5
for /f %%h in ('dir /b "%FILE_DE%"\ ^| findstr /L "PT04"') do set usp_de_5=%%h  
if exist "%FILE_DE%\%usp_de_5%" (  
	XCOPY "%FILE_DE%\%usp_de_5%" "%ziel%\For_Akeneo\%sku%\%sku%_de_0005_usp___.jpg*" /Y  
)

echo usp de 6
for /f %%i in ('dir /b "%FILE_DE%"\ ^| findstr /L "PT05"') do set usp_de_6=%%i  
if exist "%FILE_DE%\%usp_de_6%" (  
	XCOPY "%FILE_DE%\%usp_de_6%" "%ziel%\For_Akeneo\%sku%\%sku%_de_0006_usp___.jpg*" /Y  
)

echo usp de 7
for /f %%j in ('dir /b "%FILE_DE%"\ ^| findstr /L "PT06"') do set usp_de_7=%%j  
if exist "%FILE_DE%\%usp_de_7%" (  
	XCOPY "%FILE_DE%\%usp_de_7%" "%ziel%\For_Akeneo\%sku%\%sku%_de_0007_usp___.jpg*" /Y  
)

echo usp de 8
for /f %%k in ('dir /b "%FILE_DE%"\ ^| findstr /L "PT07"') do set usp_de_8=%%k  
if exist "%FILE_DE%\%usp_de_8%" (  
	XCOPY "%FILE_DE%\%usp_de_8%" "%ziel%\For_Akeneo\%sku%\%sku%_de_0008_usp___.jpg*" /Y  
)

echo usp de 9
for /f %%l in ('dir /b "%FILE_DE%"\ ^| findstr /L "PT08"') do set usp_de_9=%%l  
if exist "%FILE_DE%\%usp_de_9%" (  
	XCOPY "%FILE_DE%\%usp_de_9%" "%ziel%\For_Akeneo\%sku%\%sku%_de_0009_usp___.jpg*" /Y  
)

Da mehrere Bilder mit der gleichen sku auf einmal bearbeitet werden sollen habe ich natürlich die entsprechende Anzahl an Schleifen...

Was passiert wenn ich die batch ausführe... Er durchläuft die Schleife und findet auch die Datei mit "Main2" im Namen, kopiert sie und benennt sie auch gleich richtig... (Dann macht sie ja was sie soll... könnte man denken)...

Nun sage ich es mal so... Fast
Wenn z.B. PT07 und PT08 nicht vorhanden sind, durchläuft es die Schleife trotzdem und fügt Dateien mit der entsprechenden Endung in den Ordner.

Theoretisch könnte ich auch einen direkten XCOPY Befehl schreiben, da der Dateipfad bekannt ist. Lediglich eine 10 stellige ASIN weicht ab und ist nicht bekannt. Kann ich nicht für diese irgendwelche Platzhalter benutzen (wie *,>,?)???

Ich danke euch sehr!!!

Content-ID: 4336197637

Url: https://administrator.de/forum/batch-was-tun-wenn-der-dateiname-nicht-bekannt-ist-4336197637.html

Ausgedruckt am: 22.04.2025 um 11:04 Uhr

TK1987
Lösung TK1987 20.10.2022 aktualisiert um 11:23:32 Uhr
Goto Top
Moin,

Zitat von @Pistensau:
Wenn z.B. PT07 und PT08 nicht vorhanden sind, durchläuft es die Schleife trotzdem und fügt Dateien mit der entsprechenden Endung in den Ordner.
liegen denn Dateien mit diesem Namen im Skriptverzeichnis? Du nutzt eine Variable "%FILE_DE%" - ich sehe jedoch nicht, dass diese irgendwo im Skript deklariert wird.
Vermutlich listet der dir-Befehl an der Stelle den Inhalt des Skriptverzeichnisses auf.

Theoretisch könnte ich auch einen direkten XCOPY Befehl schreiben, da der Dateipfad bekannt ist. Lediglich eine 10 stellige ASIN weicht ab und ist nicht bekannt. Kann ich nicht für diese irgendwelche Platzhalter benutzen (wie *,>,?)???
xcopy kennt "*" und "?" als Platzhalter, also wieso nicht?
Bei findstr könnte man ebenfalls statt Parameter /L den Parameter /R nehmen und Punkte als Platzhalter verwenden.

BTW: Mit Powershell wird das Leben leichter.
Warum PowerShell und nicht Batch?
Powershell - Leitfaden für Anfänger

Gruß Thomas
Pistensau
Pistensau 20.10.2022 um 15:31:33 Uhr
Goto Top
Hallo Thomas,

vielen Dank für deine Antwort... hat mit xcopy und "*" wunderbar funktioniert.
1000 Dank dir.

BTW: Mit Powershell wird das Leben leichter.
Ich habe mit PowerShell noch nie gearbeitet und mich auch noch nie da ran getraut. Aber vielleicht wäre es auch eine Lösung für zukünftige Projekte.

Gruß Adam