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:
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!!!
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!!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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
2 Kommentare
Neuester Kommentar
Moin,
Vermutlich listet der dir-Befehl an der Stelle den Inhalt des Skriptverzeichnisses auf.
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
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.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.
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